- 当前 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 = 0Page({ 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 }) }}) |

用wx:if 可以 或者判断数组第一个有没有也可以
<button disabled wx:if="{{imgs.length<1&&options.biz==1}}">发送</button> <button wx:else>发送</button> <button disabled="{{!(imgs[0]&&options.biz==1)}}">发送</button>你好,请问复现了吗
问题已复现,跟进处理中。
感谢反馈。问题已复现,原因我们也知道了。但是这个问题修复起来有顾虑(主要是完美修复的话会有 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的