微信小程序 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 学习之二 属性(类)
Nov 25 Javascript
jQuery实战之仿淘宝商城左侧导航效果
Apr 12 Javascript
如何让浏览器支持jquery ajax load 前进、后退功能
Jun 12 Javascript
jquery中$each()方法的使用指南
Apr 30 Javascript
JQuery中上下文选择器实现方法
May 18 Javascript
浅析Bootstrap缩略图组件与警示框组件
Apr 29 Javascript
canvas滤镜效果实现代码
Feb 06 Javascript
DOM事件探秘篇
Feb 15 Javascript
基于javascript的异步编程实例详解
Apr 10 Javascript
Bootstrap-table自定义可编辑每页显示记录数
Sep 07 Javascript
Vue scrollBehavior 滚动行为实现后退页面显示在上次浏览的位置
May 27 Javascript
微信小程序动态添加和删除组件的现实
Feb 28 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/05/27 PHP
PHP连接MSSQL方法汇总
2016/02/05 PHP
PHP中危险的file_put_contents函数详解
2017/11/04 PHP
javascript之通用简单的table选项卡实现(二)
2010/05/09 Javascript
javascript+html5实现仿flash滚动播放图片的方法
2015/04/27 Javascript
使用AngularJS对路由进行安全性处理的方法
2015/06/18 Javascript
浏览器兼容性问题大汇总
2015/12/17 Javascript
jquery实现全选功能效果的实现代码
2016/05/05 Javascript
Bootstrap实现登录校验表单(带验证码)
2016/06/23 Javascript
seajs学习之模块的依赖加载及模块API的导出
2016/10/20 Javascript
微信小程序 购物车简单实例
2016/10/24 Javascript
JS中事件冒泡和事件捕获介绍
2016/12/13 Javascript
基于Vue实现timepicker
2017/04/25 Javascript
详解Vue组件实现tips的总结
2017/11/01 Javascript
JavaScript设计模式之单例模式原理与用法实例分析
2018/07/26 Javascript
webpack实现一个行内样式px转vw的loader示例
2018/09/13 Javascript
浅谈VueJS SSR 后端绘制内存泄漏的相关解决经验
2018/12/20 Javascript
[01:18]一目了然!DOTA2DotA快捷操作对比第一弹
2014/07/01 DOTA
[44:15]DOTA2上海特级锦标赛主赛事日 - 5 败者组决赛Liquid VS EG第二局
2016/03/06 DOTA
[33:23]VG vs Pain 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[41:05]Serenity vs Pain 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python中关键字is与==的区别简述
2014/07/31 Python
Python网络编程基于多线程实现多用户全双工聊天功能示例
2018/04/10 Python
Python常用字符串替换函数strip、replace及sub用法示例
2018/05/21 Python
Tensorflow分类器项目自定义数据读入的实现
2019/02/05 Python
Python装饰器实现方法及应用场景详解
2020/03/26 Python
HTTP状态码详解
2021/03/18 杂记
HTML5语义化元素你真的用对了吗
2019/08/22 HTML / CSS
英国最大的独立摄影零售商:Park Cameras
2019/11/27 全球购物
网络体系结构及协议的定义
2014/03/13 面试题
市场营销专业毕业生求职信
2014/03/26 职场文书
出生公证委托书
2014/04/03 职场文书
服装发布会策划方案
2014/05/22 职场文书
新教师岗前培训方案
2014/06/05 职场文书
解除聘用合同证明书范本
2014/09/11 职场文书
Python 快速验证代理IP是否有效的方法实现
2021/07/15 Python