微信小程序 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 相关文章推荐
Prototype使用指南之hash.js
Jan 10 Javascript
javascript 动态添加事件代码
Nov 30 Javascript
jQuery 解析xml文件
Aug 09 Javascript
jQuery的强大选择器小结
Dec 27 Javascript
常见的原始JS选择器使用方法总结
Apr 09 Javascript
vue项目中做编辑功能传递数据时遇到问题的解决方法
Dec 19 Javascript
AngularJS使用ng-inlude指令加载页面失败的原因与解决方法
Jan 19 Javascript
原生js实现弹出层效果
Jan 20 Javascript
JS使用ActiveXObject实现用户提交表单时屏蔽敏感词功能
Jun 20 Javascript
Angular事件之不同组件间传递数据的方法
Nov 15 Javascript
js作用域和作用域链及预解析
Apr 11 Javascript
详解jenkins自动化部署vue
May 14 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来实现网络服务
2009/09/15 PHP
一步一步学习PHP(8) php 数组
2010/03/05 PHP
PHP ? EasyUI DataGrid 资料存的方式介绍
2012/11/07 PHP
关于JSON以及JSON在PHP中的应用技巧
2013/11/27 PHP
函数中使用require_once问题深入探讨 优雅的配置文件定义方法推荐
2014/07/02 PHP
详解js异步文件加载器
2016/01/24 PHP
TFDN图片播放器 不错自动播放
2006/10/03 Javascript
深入分析js的冒泡事件
2014/12/05 Javascript
理解AngularJs指令
2015/12/10 Javascript
详解JavaScript基于面向对象之创建对象(2)
2015/12/10 Javascript
JS+JSP通过img标签调用实现静态页面访问次数统计的方法
2015/12/14 Javascript
原生js实现图片层叠轮播切换效果
2016/02/02 Javascript
js动态获取子复选项并设计全选及提交的实现方法
2016/06/24 Javascript
JavaScript与Java正则表达式写法的区别介绍
2017/08/15 Javascript
浅谈vue中数据双向绑定的实现原理
2017/09/14 Javascript
详解Webpack + ES6 最新环境搭建与配置
2018/06/04 Javascript
原生JS实现的轮播图功能详解
2018/08/06 Javascript
react项目如何使用iconfont的方法步骤
2019/03/13 Javascript
JS端基于download.js实现图片、视频时直接下载而不是打开预览
2020/05/09 Javascript
jQuery实现飞机大战小游戏
2020/07/05 jQuery
[56:45]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第一局
2016/02/28 DOTA
[03:56]DOTA2完美大师赛趣味视频之小鸽子和Mineski打台球
2017/11/24 DOTA
python网络编程之读取网站根目录实例
2014/09/30 Python
Python实现模拟时钟代码推荐
2015/11/08 Python
详解django中自定义标签和过滤器
2017/07/03 Python
opencv导入头文件时报错#include的解决方法
2019/07/31 Python
英国最大的女士服装零售商:Bonmarché
2017/08/17 全球购物
简述Linux文件系统通过i节点把文件的逻辑结构和物理结构转换的工作过程
2012/04/17 面试题
UML设计模式笔试题
2014/06/07 面试题
国贸类专业毕业生的求职信分享
2013/12/08 职场文书
关于圣诞节的广播稿
2014/01/26 职场文书
学生检讨书
2015/01/27 职场文书
2015年实习班主任工作总结
2015/04/23 职场文书
教师反邪教心得体会
2016/01/15 职场文书
2021年国产动漫公司排行前十名,玄机科技上榜,第二推出过铠甲勇士
2022/03/18 杂记
JS前端使用canvas实现物体的点选示例
2022/08/05 Javascript