微信小程序 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 相关文章推荐
基于jQuery的倒计时插件代码
May 07 Javascript
js点击更换背景颜色或图片的实例代码
Jun 25 Javascript
js实现jquery的offset()方法实例
Jan 10 Javascript
Node.js DES加密的简单实现
Jul 07 Javascript
vue 使用Jade模板写html,stylus写css的方法
Feb 23 Javascript
vue2 全局变量的设置方法
Mar 09 Javascript
pageGroup.js实现分页功能
Jul 27 Javascript
ES6 Object.assign()的用法及其使用
Jan 18 Javascript
详解react组件通讯方式(多种)
May 06 Javascript
vue中echarts图表大小适应窗口大小且不需要刷新案例
Jul 19 Javascript
详解node.js创建一个web服务器(Server)的详细步骤
Jan 15 Javascript
JavaScript 对象创建的3种方法
Nov 17 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
第十一节--重载
2006/11/16 PHP
简单介绍下 PHP5 中引入的 MYSQLI的用途
2007/03/19 PHP
PHP笔记之:日期函数的使用介绍
2013/04/24 PHP
PHP数字字符串左侧补0、字符串填充和自动补齐的几种方法
2014/05/10 PHP
PHP的Yii框架中过滤器相关的使用总结
2016/03/29 PHP
PHP简单实现无限级分类的方法
2016/05/13 PHP
laravel框架中控制器的创建和使用方法分析
2019/11/23 PHP
BOOM vs RR BO5 第三场 2.14
2021/03/10 DOTA
javascript 去字符串空格终极版(支持utf8)
2009/11/14 Javascript
12个超实用的JQuery代码片段
2015/11/02 Javascript
js闭包引起的事件注册问题介绍
2016/03/29 Javascript
JavaScript浏览器对象之一Window对象详解
2016/06/03 Javascript
javascript中获取元素标签中间的内容的实现方法
2016/10/08 Javascript
深入理解JavaScript中的预解析
2017/01/04 Javascript
js循环map 获取所有的key和value的实现代码(json)
2018/05/09 Javascript
微信小程序canvas截取任意形状的实现代码
2020/01/13 Javascript
python实现图片变亮或者变暗的方法
2015/06/01 Python
Python构建网页爬虫原理分析
2017/12/19 Python
浅谈Python2获取中文文件名的编码问题
2018/01/09 Python
python利用requests库模拟post请求时json的使用教程
2018/12/07 Python
Python反爬虫技术之防止IP地址被封杀的讲解
2019/01/09 Python
详解Python 字符串相似性的几种度量方法
2019/08/29 Python
window7下的python2.7版本和python3.5版本的opencv-python安装过程
2019/10/24 Python
详解Python 重学requests发起请求的基本方式
2020/02/07 Python
Python利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题
2020/02/21 Python
Python Mock模块原理及使用方法详解
2020/07/07 Python
Python爬虫Scrapy框架CrawlSpider原理及使用案例
2020/11/20 Python
python+playwright微软自动化工具的使用
2021/02/02 Python
基于CSS3 animation动画属性实现轮播图效果
2017/09/12 HTML / CSS
英国鲜花速递:Serenata Flowers
2018/04/03 全球购物
IdealFit官方网站:女性蛋白质、补充剂和运动服装
2019/03/24 全球购物
优秀大学生求职自荐信范文
2014/04/19 职场文书
Python爬取科目四考试题库的方法实现
2021/03/30 Python
如何用JavaScript学习算法复杂度
2021/04/30 Javascript
使用react+redux实现计数器功能及遇到问题
2021/06/02 Javascript
MySQL8.0 Undo Tablespace管理详解
2022/06/16 MySQL