微信小程序 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 相关文章推荐
javascript生成随机大小写字母的方法
Feb 20 Javascript
jquery 为a标签绑定click事件示例代码
Jun 23 Javascript
javascript事件处理模型实例说明
May 31 Javascript
JS使用正则表达式实现关键字替换加粗功能示例
Aug 03 Javascript
JavaScript常用代码书写规范的超全面总结
Sep 11 Javascript
浅析BootStrap中Modal(模态框)使用心得
Dec 24 Javascript
vue2 自定义动态组件所遇到的问题
Jun 08 Javascript
基于jQuery实现手风琴菜单、层级菜单、置顶菜单、无缝滚动效果
Jul 20 jQuery
node+express+ejs使用模版引擎做的一个示例demo
Sep 18 Javascript
AngularJS中scope的绑定策略实例分析
Oct 30 Javascript
vue.js中proxyTable 转发请求的实现方法
Sep 20 Javascript
js将URL网址转为16进制加密与解密函数
Mar 04 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/02/19 PHP
php保存二进制原始数据为图片的程序代码
2014/10/14 PHP
php写app用的框架整理
2019/09/29 PHP
List Information About the Binary Files Used by an Application
2007/06/11 Javascript
用javascript做拖动布局的思路
2008/05/31 Javascript
js关闭当前页面(窗口)的几种方式总结
2013/03/05 Javascript
JavaScript初学者建议:不要去管浏览器兼容
2014/02/04 Javascript
jquery中map函数与each函数的区别实例介绍
2014/06/23 Javascript
jQuery语法小结(超实用)
2015/12/31 Javascript
原生js实现addClass,removeClass,hasClass方法
2016/04/27 Javascript
使用Node.js实现简易MVC框架的方法
2017/08/07 Javascript
在 React、Vue项目中使用SVG的方法
2018/02/09 Javascript
小程序实现页面顶部选项卡效果
2018/11/06 Javascript
微信小程序实现打开并下载服务器上面的pdf文件到手机
2019/09/20 Javascript
vue-resource:jsonp请求百度搜索的接口示例
2019/11/09 Javascript
jQuery实现移动端图片上传预览组件的方法分析
2020/05/01 jQuery
基于better-scroll 实现歌词联动功能的代码
2020/05/07 Javascript
ES6箭头函数和扩展实例分析
2020/05/23 Javascript
Vue中父子组件的值传递与方法传递
2020/09/28 Javascript
python3使用tkinter实现ui界面简单实例
2014/01/10 Python
用Python实现一个简单的能够发送带附件的邮件程序的教程
2015/04/08 Python
Python实现购物车购物小程序
2018/04/18 Python
python保存二维数组到txt文件中的方法
2018/11/15 Python
Python输出\u编码将其转换成中文的实例
2018/12/15 Python
Python面向对象程序设计类的封装与继承用法示例
2019/04/12 Python
Python2.7实现多进程下开发多线程示例
2019/05/31 Python
Django-rest-framework中过滤器的定制实例
2020/04/01 Python
Python爬取网页信息的示例
2020/09/24 Python
Fnac西班牙官网:法国文化和电子产品零售商
2021/03/14 全球购物
世界读书日的活动方案
2014/08/20 职场文书
2015年教师节感恩寄语
2015/03/23 职场文书
python用字节处理文件实例讲解
2021/04/13 Python
分布式锁为什么要选择Zookeeper而不是Redis?看完这篇你就明白了
2021/05/21 Redis
用Python爬取各大高校并可视化帮弟弟选大学,弟弟直呼牛X
2021/06/11 Python
Nginx四层负载均衡的配置指南
2021/06/11 Servers
Matplotlib绘制条形图的方法你知道吗
2022/03/21 Python