`

微信小程序-wx:key

 
阅读更多

wx:key

 

如果列表中项目的位置会动态改变或者有新的项目添加到列表中,并且希望列表中的项目保持自己的特征和状态(如 <input/> 中的输入内容,<switch/> 的选中状态),需要使用 wx:key 来指定列表中项目的唯一的标识符。

 

wx:key 的值以两种形式提供

  1. 字符串,代表在 for 循环的 array 中 item 的某个 property,该 property 的值需要是列表中唯一的字符串或数字,且不能动态改变。
  2. 保留关键字 *this 代表在 for 循环中的 item 本身,这种表示需要 item 本身是一个唯一的字符串或者数字,如:当数据改变触发渲染层重新渲染的时候,会校正带有 key 的组件,框架会确保他们被重新排序,而不是重新创建,以确保使组件保持自身的状态,并且提高列表渲染时的效率。

如不提供 wx:key,会报一个 warning, 如果明确知道该列表是静态,或者不必关注其顺序,可以选择忽略。

 

<view>
    <switch wx:for="{{objectArray}}" wx:key="unique" style="display:block;">{{item.id}}
    </switch>
    <button bindtap="switch"> Switch </button>
    <button bindtap="addToFront"> Add to the front </button>

    <switch wx:for="{{numberArray}}" wx:key="*this" style="display: block;"> {{item}} </switch>
    <button bindtap="addNumberToFront"> Add to the front </button>
</view>

 

Page({
  data: {
    objectArray: [
      {id: 5, unique: 'unique_5'},
      {id: 4, unique: 'unique_4'},
      {id: 3, unique: 'unique_3'},
      {id: 2, unique: 'unique_2'},
      {id: 1, unique: 'unique_1'},
      {id: 0, unique: 'unique_0'},
    ],
    numberArray: [1, 2, 3, 4]
  },
  switch: function(e) {
    const length = this.data.objectArray.length
    for (let i = 0; i < length; ++i) {
      const x = Math.floor(Math.random() * length)
      const y = Math.floor(Math.random() * length)
      const temp = this.data.objectArray[x]
      this.data.objectArray[x] = this.data.objectArray[y]
      this.data.objectArray[y] = temp
    }
    this.setData({
      objectArray: this.data.objectArray
    })
  },
  addToFront: function(e) {
    const length = this.data.objectArray.length
    this.data.objectArray=[{id:length,unique:'unique_'+length}].concat(this.data.objectArray)
    this.setData({
      objectArray: this.data.objectArray
    })
  },
  addNumberToFront: function(e){
    this.data.numberArray=[this.data.numberArray.length + 1 ].concat(this.data.numberArray)
    this.setData({
      numberArray: this.data.numberArray
    })
  }
})

 

分享到:
评论

相关推荐

    微信小程序控制台提示warning:Now you can provide attr "wx:key" for a "wx:for" to improve performance解决方法

    主要介绍了微信小程序控制台提示warning:Now you can provide attr "wx:key" for a "wx:for" to improve performance解决方法,简单分析了wx:for警告提示相关解决方法,需要的朋友可以参考下

    微信小程序demo:todo:wx.setStorageSync(KEY,DATA) 方法存放数据(源代码+截图)

    微信小程序demo:todo:wx.setStorageSync(KEY,DATA) 方法存放数据(源代码+截图)微信小程序demo:todo:wx.setStorageSync(KEY,DATA) 方法存放数据(源代码+截图)微信小程序demo:todo:wx.setStorageSync(KEY,DATA) ...

    微信小程序-微信小程序-RSA-签名-验签-加密-解密

    &gt; 一个适用于微信小程序的RSA签名库。 RSA签名的小程序DEMO:https://github.com/zhangzhaopds/WeixinApp_RSA_Signature.git 使用 1、引入文件 var RSA = require('../../utils/wxapp_rsa.js') 2、调用 var private...

    微信小程序-腾讯云 COS 微信小程序 SDK

    微信小程序 sdk for 腾讯云对象存储服务 前期准备 请您到 https://console.qcloud.com/cos 获取您的项目 ID(appid),bucket,secret_id 和 secret_key。 请您到 https://console.qcloud.com/cos 针对您要操作的 ...

    微信小程序-常规功能:豆瓣电影.zip

    微信小程序是一种轻量级的应用开发平台,主要针对移动端,它允许开发者通过微信生态系统提供便捷的服务和功能。在“微信小程序-常规功能:豆瓣电影.zip”这个压缩包中,包含了一个用于展示豆瓣电影信息的小程序模板...

    微信小程序 wx:for 与 wx:for-items 与 wx:key的正确用法

    微信小程序的循环实现,通过wx:for 与 wx:for-items 与 wx:key,那么他的主要使用特点是什么呢? 1 wx:for 从目前的例子看,wx:for 的使用确实是对数组来做的,参考微信icon示例程序。 示例里面都是对数组进行条件...

    微信小程序-登入

    6. **本地存储(Local Storage)**:小程序成功登录后,通常会将Session Key保存在微信小程序的`wx.setStorageSync`中,以供后续页面访问。 7. **会话管理(Session Management)**:每次请求接口时,都要带上...

    微信小程序-微信小程序 仿jQuery插件

    "微信小程序-微信小程序 仿jQuery插件"是一个针对微信小程序开发的工具,它借鉴了jQuery的设计理念,以简化数据操作和DOM(文档对象模型)处理,提升开发效率。 这个名为`wxQuery`的插件是对`Page.prototype....

    微信小程序 wx:key详细介绍

    微信小程序的`wx:key`是一个非常重要的属性,用于在列表渲染时标识列表项的独特性,尤其是在数据动态变化时保持组件的状态。在开发微信小程序时,如果你的列表需要更新或者有新项插入,`wx:key`可以帮助提高性能和...

    微信小程序-模仿豆瓣电影的小程序

    微信小程序是一种轻量级的应用开发平台,主要用于在微信内运行,无需下载安装即可使用的应用程序。本项目是关于“微信小程序-模仿豆瓣电影”的一个实践案例,旨在帮助开发者学习和掌握微信小程序的开发技能,以及...

    微信小程序-知乎全功能源码

    2. **数据绑定和状态管理**:在微信小程序中,数据绑定是通过`data`属性和`wx:if`、`wx:key`等指令来实现的。状态管理则可以通过类似Vuex的`wxs`(微信小程序脚本)文件来集中管理,保证组件间的数据同步。 3. **...

    微信小程序的数组添加、wx:for循环、删除、显示与隐藏,可以记录每一件事情

    这个教程将带你了解如何在微信小程序中处理数组,包括向数组添加元素、使用`wx:for`循环展示数据、删除数组中的元素以及控制元素的显示与隐藏。作为一名小程序的新手,掌握这些技巧将有助于你更高效地构建应用。 1....

    微信小程序-微信小程序-心邮

    第四步:在Bmob后台创建应用,将你的AppID(小程序ID)和AppSecret(小程序密钥)填写到Bmob的微信小程序配置密钥中。 第五步:将你的Application ID和REST API Key替换app.js中的Bmob.initialize("e3cecf75da3d...

    A03-微信小程序-飞花令设计文档1

    "微信小程序开发、飞花令设计文档" 微信小程序是微信平台上的开发环境,易于开发、功能灵活、方便部署,还绑定了交友、支付等种功能。以下是微信小程序飞花令设计文档的知识点: 一、背景介绍 * 微信小程序的发展...

    微信小程序-实现图灵机器人聊天功能

    在微信小程序中,你可以使用`wx.request()`方法来发送网络请求到图灵机器人的API。这个API通常是一个HTTP POST请求,你需要在请求体中包含你的key以及用户输入的文本。图灵机器人的API会返回一个JSON格式的响应,...

    200个微信小程序案例源码可运行.zip

    微信小程序demo: todo: wx.setStorageSync(KEY,DATA) 方法存放数据 微信小程序demo: V2EX (11月9日版) 微信小程序demo:百思不得姐 微信小程序demo:百思不得姐:使用不得姐api 微信小程序demo:柏拉图测试:趣味图片生成...

    微信小程序-微信小程序天气

    1. 微信内置的定位接口:微信小程序提供了获取用户位置的API,如`wx.getLocation`,可以获取到用户当前的经纬度信息。通过这个接口,小程序能知道用户所在的位置,为显示当地天气信息做好准备。 2. 百度地图接口:...

    微信小程序-体育新闻小程序源码及项目截图

    1. **数据获取**:通过调用微信小程序的API,如`wx.request`,从服务器获取最新的体育新闻数据。数据通常以JSON格式返回,需要在`.js`文件中解析并存储到页面数据中。 2. **列表展示**:在`.wxml`文件中,利用`...

    微信小程序-movecss效果

    微信小程序是一种轻量级的应用开发平台,它允许开发者在微信内构建原生体验的应用,无需通过App Store或Google Play等传统应用商店下载。"movecss效果"是指在微信小程序中实现CSS动画,尤其是涉及到元素移动的动画...

    基于微信小程序-爱跑腿外卖.zip

    在复杂的业务场景下,可能还需要使用到微信小程序的`wx:if`、`wx:else`、`wx:key`等指令以及`Page`对象的`data`属性来管理状态。 7. **网络请求API**:小程序提供了HTTP和WebSocket接口,可以实现与服务器的数据...

Global site tag (gtag.js) - Google Analytics