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


Posted in Javascript onOctober 28, 2016

微信小程序 wx:key 在自己学习的时候不是多明白到底是怎么回事,经过上网查阅资料,整理下:

  个人感觉官方给出的例 子不是很明确,官方解释如下:

wx:key

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

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

字符串,代表在 for 循环的 array 中 item 的某个 property,该 property 的值需要是列表中唯一的字符串或数字,且不能动态改变。

保留关键字 *this 代表在 for 循环中的 item 本身,这种表示需要 item 本身是一个唯一的字符串或者数字,如:

当数据改变触发渲染层重新渲染的时候,会校正带有 key 的组件,框架会确保他们被重新排序,而不是重新创建,以确保使组

件保持自身的状态,并且提高列表渲染时的效率。

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

示例代码:

<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>
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
  })
 }
})

这里写下个人的理解,有什么不对的地方希望大家指正:以<switch></switch>为例,如果没有wx:key,选中其中的某个按钮的时候,改变其顺序 或添加选项的时,选中的按钮时不回跟随 上个按钮改变顺序的,会一直在固定位子,如果如果有wx:key则相反,适用于列表或其他标签可以改变顺序或添加项目的情况

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Javascript 相关文章推荐
jsTree树控件(基于jQuery, 超强悍)[推荐]
Sep 01 Javascript
JavaScript原型继承之基础机制分析
Aug 26 Javascript
jquery实现鼠标拖动图片效果示例代码
Jan 09 Javascript
jQuery is()函数用法3例
May 06 Javascript
vue-router启用history模式下的开发及非根目录部署方法
Dec 23 Javascript
配置eslint规范项目代码风格
Mar 11 Javascript
vue 组件中使用 transition 和 transition-group实现过渡动画
Jul 09 Javascript
Vue+Node服务器查询Mongo数据库及页面数据传递操作实例分析
Dec 20 Javascript
前端开发之便利店收银系统代码
Dec 27 Javascript
node.js使用net模块创建服务器和客户端示例【基于TCP协议】
Feb 14 Javascript
在项目vue中使用echarts的操作步骤
Sep 07 Javascript
原生js实现弹幕效果
Nov 29 Javascript
微信小程序 使用picker封装省市区三级联动实例代码
Oct 28 #Javascript
基于Layer+jQuery的自定义弹框
May 26 #Javascript
微信开发 js实现tabs选项卡效果
Oct 28 #Javascript
微信开发 使用picker封装省市区三级联动模板
Oct 28 #Javascript
Easyui的组合框的取值与赋值
Oct 28 #Javascript
JS制作适用于手机和电脑的通知信息效果
Oct 28 #Javascript
Jquery UI实现一次拖拽多个选中的元素操作
Dec 01 #Javascript
You might like
php判断手机访问还是电脑访问示例分享
2014/01/20 PHP
JavaScript Date对象 日期获取函数
2010/12/19 Javascript
使用jquery实现IE下按backspace相当于返回操作
2014/03/18 Javascript
Node.js与Sails ~项目结构与Mvc实现及日志机制
2015/10/14 Javascript
使用jQuery监听DOM元素大小变化
2016/02/24 Javascript
jQuery的ready方法实现原理分析
2016/10/26 Javascript
jquery.form.js异步提交表单详解
2017/04/25 jQuery
Angular.js中下拉框实现渲染html的方法
2017/06/18 Javascript
详解a++和++a的区别
2017/08/30 Javascript
在ES5与ES6环境下处理函数默认参数的实现方法
2018/05/13 Javascript
手把手教你写一个微信小程序(推荐)
2018/10/17 Javascript
jQuery实现的3D版图片轮播示例【滑动轮播】
2019/01/18 jQuery
vue2.0+vue-router构建一个简单的列表页的示例代码
2019/02/13 Javascript
react项目如何使用iconfont的方法步骤
2019/03/13 Javascript
微信JS-SDK实现微信会员卡功能(给用户微信卡包里发送会员卡)
2019/07/25 Javascript
vue解决使用$http获取数据时报错的问题
2019/10/30 Javascript
原生js实现无缝轮播图
2020/01/11 Javascript
JavaScript实现轮播图效果
2020/10/30 Javascript
用python登录Dr.com思路以及代码分享
2014/06/25 Python
python redis 删除key脚本的实例
2019/02/19 Python
Python中的引用知识点总结
2019/05/20 Python
Python使用百度api做人脸对比的方法
2019/08/28 Python
Python中turtle库的使用实例
2019/09/09 Python
Python astype(np.float)函数使用方法解析
2020/06/08 Python
python 批量将中文名转换为拼音
2021/02/07 Python
css3实现垂直下拉动画菜单示例
2014/04/22 HTML / CSS
美国Rue La La闪购网站:奢侈品、中高档品牌限时折扣
2016/10/19 全球购物
eDreams巴西:廉价机票,酒店优惠和度假套餐
2017/04/14 全球购物
GEOX鞋美国官方网站:意大利会呼吸的鞋
2017/07/12 全球购物
美国羽绒床上用品第一品牌:Pacific Coast
2018/08/25 全球购物
您熟悉ORM(Object-Relation Mapping)吗?请谈谈您所理解的ORM
2016/02/08 面试题
写出SQL四条最基本的数据操作语句(DML)
2012/12/12 面试题
应届本科生推荐信范文
2013/12/25 职场文书
营销与策划专业求职信
2014/06/20 职场文书
环境保护与污染治理求职信
2014/07/16 职场文书
《中国梦我的梦》小学生演讲稿
2014/08/20 职场文书