微信小程序 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 相关文章推荐
Js 获取当前日期时间及其它操作实现代码
Mar 04 Javascript
EasyUi tabs的高度与宽度根据IE窗口的变化自适应代码
Oct 26 Javascript
javascript与webservice的通信实现代码
Dec 25 Javascript
js DOM的学习笔记
Dec 22 Javascript
js实现div弹出层的方法
Nov 20 Javascript
jQuery插件Tmpl的简单使用方法
Apr 27 Javascript
纯javascript实现的小游戏《Flappy Pig》实例
Jul 27 Javascript
bootstrap网页框架的使用方法
May 10 Javascript
jQuery实现点击下拉框中的值累加到文本框中的方法示例
Oct 28 jQuery
angular6.x中ngTemplateOutlet指令的使用示例
Aug 09 Javascript
Vue + element 实现多选框组并保存已选id集合的示例代码
Jun 03 Javascript
全面解析js中的原型,原型对象,原型链
Jan 25 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&amp;&amp;mysql)二
2006/10/09 PHP
php使用gzip压缩传输js和css文件的方法
2015/07/29 PHP
PHP中trait使用方法详细介绍
2017/05/21 PHP
PHP后期静态绑定实例浅析
2018/12/21 PHP
jQuery下的动画处理总结
2013/10/10 Javascript
js浏览器本地存储store.js介绍及应用
2014/05/13 Javascript
js onmousewheel事件多次触发问题解决方法
2014/10/17 Javascript
Javascript基础教程之数据类型转换
2015/01/18 Javascript
轻松学习jQuery插件EasyUI EasyUI创建CRUD应用
2015/11/30 Javascript
javascript基础知识分享之类与函数化
2016/02/13 Javascript
ES6记录异步函数的执行时间详解
2016/08/31 Javascript
基于Bootstrap漂亮简洁的CSS3价格表(附源码下载)
2017/02/28 Javascript
JS排序之选择排序详解
2017/04/08 Javascript
Vue的路由动态重定向和导航守卫实例
2018/03/17 Javascript
vue ssr 实现方式(学习笔记)
2019/01/18 Javascript
详解JavaScript中的函数、对象
2019/04/01 Javascript
服务端预渲染之Nuxt(使用篇)
2019/04/08 Javascript
详解vue项目中实现图片裁剪功能
2019/06/07 Javascript
解决layui表格内文本超出隐藏的问题
2019/09/12 Javascript
vue或react项目生产环境去掉console.log的操作
2020/09/02 Javascript
vue 使用原生组件上传图片的实例
2020/09/08 Javascript
[00:47]DOTA2荣耀之路6:玩不了啦!
2018/05/30 DOTA
python使用smtplib模块通过gmail实现邮件发送的方法
2015/05/08 Python
Python自动生产表情包
2017/03/17 Python
对Python random模块打乱数组顺序的实例讲解
2018/11/08 Python
python实现中文文本分句的例子
2019/07/15 Python
tensorflow 报错unitialized value的解决方法
2020/02/06 Python
推荐值得学习的12款python-web开发框架
2020/08/10 Python
浅析几个CSS3常用功能的写法
2014/06/05 HTML / CSS
Soft Cotton捷克:来自爱琴海棉花的浴袍
2017/02/01 全球购物
师范生自荐信
2013/10/27 职场文书
《猴子种树》教学反思
2014/02/14 职场文书
高中教师个人工作总结
2015/02/10 职场文书
小时代观后感
2015/06/10 职场文书
mongodb清除连接和日志的正确方法分享
2021/09/15 MongoDB
进阶篇之linux环境下安装MySQL数据库
2022/04/09 MySQL