-
为什么要使用wx:key
如果列表中的项目的位置会动态变换,或者有新的项目加到列表中时,如果没有添加wx:key的话,项目原先的属性可能会发生改变,
因为没有添加wx:key,所以属性修饰的是列表中对应位置的项目,而不是针对项目的本身,
所以当有新的项目加入列表或者是列表中项目的位置发生改变时,原先修饰项目的属性可能不再是修饰该项目, -
如何使用
data: {
lines:[
{ id: 5, unique: "u-5"},
{ id: 4, unique: "u-4" },
{ id: 3, unique: "u-3" },
{ id: 2, unique: "u-2" },
{ id: 1, unique: "u-1" }
]
},
tapEvent: function(event){
var lines = this.data.lines;
lines.splice(0, 0, { id: (this.data.num++), unique: "u-6"});
this.setData({lines:lines})
},
<switch wx:for="{{lines}}" style="display:block"
wx:key="unique">{{item.id}}</switch>
<button bindtap="tapEvent">更新</button>
README:
效果:通过按下更新按钮,会把新的< switch >标签加入lines列表中,
注意:
如果没有添加wx:key,若选中一个switch再添加另一个switch进入列表时,原先选中的switch会变成没有选中;
- wx:key的值
当item的为可变时,需要使用可以唯一标志Item的变量来作为wx:key的值;
当item为数字或者是字符串的时候,直接使用*this作为wx:key的值;
data:{
lines:[1,2,3,4,5],
student:[
{name:"zs", age:18},
{ name: "ls", age:19 },
{ name: "ww", age:20 }
]
}
<!--循环lines中的item(item为固定值)使用*this-->
<view wx:for="{{lines}}" wx:key="*this">{{item}}</view>
<view>--------------------------------------</view>
<!--循环student列表中的item(item为对象)使用具有唯一标志的变量-->
<view wx:for="{{student}}" wx:key="name">{{item.name}}</view>