微信小程序 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判断滚动条是否已到页面最底部或顶部实例
Nov 20 Javascript
jQuery实现在最后一个元素之前插入新元素的方法
Jul 18 Javascript
javascript常见数据验证插件大全
Aug 03 Javascript
JS实现密码框根据焦点的获取与失去控制文字的消失与显示效果
Nov 26 Javascript
Angular指令之restict匹配模式的详解
Jul 27 Javascript
Angular4 中内置指令的基本用法
Jul 31 Javascript
微信小程序学习笔记之获取位置信息操作图文详解
Mar 29 Javascript
vue transition 在子组件中失效的解决
Nov 12 Javascript
原生js+ajax分页组件
Jan 30 Javascript
原生js拖拽实现图形伸缩效果
Feb 10 Javascript
JavaScript或jQuery 获取option value值方法解析
May 12 jQuery
vscode+gulp轻松开发小程序的完整步骤
Oct 18 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 mssql 数据库分页SQL语句
2008/12/16 PHP
php遍历CSV类实例
2015/04/14 PHP
Yii2创建表单(ActiveForm)方法详解
2016/07/23 PHP
PHP文件管理之实现网盘及压缩包的功能操作
2017/09/20 PHP
php 算法之实现相对路径的实例
2017/10/17 PHP
JS中confirm,alert,prompt函数使用区别分析
2010/04/01 Javascript
!DOCTYPE声明对JavaScript的影响分析
2010/04/12 Javascript
基于Jquery的仿照flash放大图片效果代码
2011/03/16 Javascript
33个优秀的jQuery 教程分享(幻灯片、动画菜单)
2011/07/08 Javascript
Extjs4 消息框去掉关闭按钮(类似Ext.Msg.alert)
2013/04/02 Javascript
JavaScript实现QueryString获取GET参数的方法
2013/07/02 Javascript
js设置cookie过期及清除浏览器对应名称的cookie
2013/10/24 Javascript
利用javascript数组长度循环数组内所有元素
2013/12/27 Javascript
Bootstrap布局方式详解
2016/05/27 Javascript
javacript获取当前屏幕大小
2016/06/04 Javascript
vue移动端路由切换实例分析
2018/05/14 Javascript
JavaScript原型对象、构造函数和实例对象功能与用法详解
2018/08/04 Javascript
iphone刘海屏页面适配方法
2019/05/07 Javascript
Element Carousel 走马灯的具体实现
2020/07/26 Javascript
在Angular项目使用socket.io实现通信的方法
2021/01/05 Javascript
Python 3中print函数的使用方法总结
2017/08/08 Python
Python实现的概率分布运算操作示例
2017/08/14 Python
基于python代码实现简易滤除数字的方法
2018/07/17 Python
Python实现针对json中某个关键字段进行排序操作示例
2018/12/25 Python
Python2.7实现多进程下开发多线程示例
2019/05/31 Python
Python使用QQ邮箱发送邮件报错smtplib.SMTPAuthenticationError
2019/12/20 Python
python小项目之五子棋游戏
2019/12/26 Python
Django关于admin的使用技巧和知识点
2020/02/10 Python
CSS3的calc()做响应模式布局的实现方法
2017/09/06 HTML / CSS
草莓网化妆品澳大利亚站:Strawberrynet AU
2017/12/18 全球购物
Blue Nile蓝色尼罗河香港官网:世界最大在线钻石珠宝销售商
2020/05/07 全球购物
CSMA/CD介质访问控制协议
2015/11/17 面试题
英语专业毕业生求职简历的自我评价
2013/10/24 职场文书
计算机大学生职业生涯规划书范文
2014/02/19 职场文书
超市开学活动方案
2014/03/01 职场文书
大学生自荐信范文
2015/03/05 职场文书