你好,我这边用了wx:key="unique",但是重新打乱了顺序之后,input的值被改回去了?这是怎么回事,我按照网上的一个例子做的也不行 <input wx:for="{{inputList}}" wx:for-item="dItem" wx:key="unique" value="id:{{dItem.id}}" /> <button bindtap="switch">switch</button> <button bindtap="addToFront">addToFront</button> Page({ data: { logs: [], inputList: [{ "id": 1, "unique": "unique1" }, { "id": 2, "unique": "unique2" }, { "id": 3, "unique": "unique3" }, { "id": 4, "unique": "unique4" }, ] }, addToFront: function(e) { const length = this.data.inputList.length + 1; this.data.inputList = [{ id: length, unique: 'unique_' + length }].concat(this.data.inputList) this.setData({ inputList: this.data.inputList }) }, switch: function(e) { const length = this.data.inputList.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.inputList[x] this.data.inputList[x] = this.data.inputList[y] this.data.inputList[y] = temp } this.setData({ inputList: this.data.inputList }) },
【框架】列表的wx:key设计的是不是有问题?文档中关于wx:key的描述如下: [代码]wx:key[代码] 的值以两种形式提供 字符串,代表在 for 循环的 array 中 item 的某个 property,该 property 的值需要是列表中唯一的字符串或数字,且不能动态改变。 保留关键字 [代码]*this[代码] 代表在 for 循环中的 item 本身,这种表示需要 item 本身是一个唯一的字符串或者数字 —————————————————————————————————————————————————— 之前没太注意这块,现在发现项目里很多地方都是这么写的: <view wx:for="{{ list }}" wx:key="{{ item.id }}">......</view> 是想将表达式{{ item.id }}的返回值作为唯一值 我的问题是,这种写法对么?列表元素可以成功复用么? 根据文档1,“代表在 for 循环的 array 中 item 的某个 property”。实际上,有没有可能把表达式{{ item.id }}的返回值当成了property,然后key用的是item[ property ],也就是 item[ item.id ] ?或者有没有可能最后key用的是item["{{ item.id }}"]?那应该都是undefined,为啥我的示例里都没有报错呢? 提供一个示例,https://developers.weixin.qq.com/s/5s3XdomT7w8T 这绝对不是一个少见的问题,我看社区里很多人都这么用了 ————————————————————————————————————————————————— 更新一下,加一个示例,这个示例的现象也不太正常:https://developers.weixin.qq.com/s/AytL4pmM7k8p ————————————————————————————————————————————————— 原来这个问题存在快1年了 https://developers.weixin.qq.com/community/develop/doc/000c2074590aa08e98372150c5b000?highLine=wx%253Akey 这篇文章的作者是严谨的,而回答全是瞎扯 https://developers.weixin.qq.com/community/develop/doc/000a82ab2d07682a699788d585bc00?highLine=wx%253Akey 这篇文章的作者遇到的现象是诡异的,而回答给他的解决方案,瞎扯 https://developers.weixin.qq.com/community/develop/doc/00062ec7eecea8f64427829ab5b400 这篇文章官方回答了,但是太言简意赅,导致底下的回答还是在瞎扯 https://developers.weixin.qq.com/community/develop/doc/000ee2aca04a102195278397e51c04 这篇文章,从头到位都是瞎扯 其实我上面的瞎扯都想用放屁来代替的,就这么个问题,磨磨唧唧弄了这么久,大部分人都还是在瞎搞。是当初设计的锅?还是文档没写清楚的锅?还是因为官方的不重视?还是社区质量太差? 即便严格按照文档的说法,我上面的两个示例还是解释不通的,哎。。。
2019-07-24