- 当前 Bug 的表现(可附上截图)
数组元素增加了,数组长度没变。
- 预期表现
数组长度正确变化
- 复现路径
https://github.com/NervJS/taro/issues/882#issuecomment-440127031
- 提供一个最简复现 Demo
<!-- index.wxml --> < block > < view class = "container" > < text wx:for = "{{contents}}" wx:for-item = "item" >{{item.text}}</ text > < button bindtap = "add" >add line by path</ button > < button bindtap = "add2" >add line by replace array</ button > < button bindtap = "log" data-content = "{{contents}}" data-content-length = "{{contents.length}}" >show log</ button > < button disabled = "{{contents.length ? false : true}}" >{{contents.length}}</ button > </ view > </ block > |
let i = 0 Page({ data: { contents: [], }, add () { this .setData({ [`contents[${i++}]`]: { text: 'test' } }) }, add2() { this .setData({ contents: [... this .data.contents, { text: 'test' }] }) }, log (ev) { console.log({ contentLength: ev.currentTarget.dataset.contentLength, content: ev.currentTarget.dataset.content }) } }) |
你好,请问复现了吗
问题已复现,跟进处理中。
感谢反馈。问题已复现,原因我们也知道了。但是这个问题修复起来有顾虑(主要是完美修复的话会有 setData 性能问题),所以估计不会很快修复,抱歉。
这里建议先用另一个变量专门存储和更新 arrayLength ,或者在数组项目改变时直接 setData 数组本身。
你好,这个问题怎么样了,没有计划修复吗,setData整个数组性能太差了
看起来短期内不会修复(目前还没有好的方案)。担心性能问题的话,单列一项 arrayLength 来单独更新比较好。
短期不会修复的意思就是,不会修复,别等了,哈哈。
提供下相关的代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)
https://developers.weixin.qq.com/s/c1lXH5mn774S
点击第一个按钮 contents.length 已经变为1了,但是 button还是disabled的