用wx:for去循环一个object Array时,写了wx:key="*this",导致控制台warning: Do not set same key \"[object Object]\" in wx:key
分析:
1 对wx:key="*this"认识不足
文档说,保留关键字 *this 代表在 for 循环中的 item 本身,这种表示需要 item 本身是一个唯一的字符串或者数字
这里我的products的数据结构是object Array,循环的每个item自然是object,当在页面上products的wx:for处写wx:key="*this",
wx:key取值是object,所以wx:key的每个项的值都一样(same),都是[object Object]。(这个error真难读。。。。)
导致了控制台的warning: Do not set same key \"[object Object]\" in wx:key
2 写wx:key的取决条件
是否要写wx:key取决于,循环的array中item的位置是否动态改变或者array中有新的item增加。这里products是静态的,目前也
不需要关注item的顺序,可以不写wx:key。
如果以后需要,文档说,wx:key 的取值除了*this ,可以是字符串,代表在 for 循环的 array 中 item 的某个 property,
该 property的值需要是列表中唯一的字符串或数字,且不能动态改变(我认为也可以直接使用wx:key="index")。
注意:wx:key的用法和一般小程序里去使用变量不一样了: wxml里一般要用一个变量,都得用双花括号包起来,但是这个wx:key
不用。。。(小程序框架设计的两套标准。。。)
3 wx:key的作用
一般来说,wx:for循环生成的多个item除内容不同外 元素本身无差别,这导致如果依赖的array发生改变,wx:for无法精确找到
具体该修改哪个item,于是会删除虚拟dom上的元素,重新iterate array并创建,这样array渲染的效率很低所以需要wx:key
的帮助,精准定位发生改变的元素。