小程序setData

data: {
    channelList: [{
        channelName: "aaa",
        channelId: "0",
        resList: [{
            title: 'aaa_111',
            imgUrl: 'http://...',
            des: 'blabla...'
        },{
            title: 'aaa_222',
            imgUrl: 'http://...',
            des: 'blabla...'
        },...]
    }, {
        channelName: "bbb",
        channelId: "12345",
        resList: [{
            title: 'bbb_111',
            imgUrl: 'http://...',
            des: 'blabla...'
        },{
            title: 'bbb_222',
            imgUrl: 'http://...',
            des: 'blabla...'
        },...]
    }, {
        channelName: "ccc",
        channelId: "4567",
        resList: []
    },...]
}

类似这种结构的Data,想给channelId:12345的resList增加数据,现在做法是:

var channelList = this.data.channelList;
for (let i = 0; i < channelList.length; i++) {
    if (channelList[i].channelId == '12345') {
        channelList[i].resList.concat(arr)
    }
}
this.setData({
    channelList:channelList
})

问题是:
1.感觉写的复杂了,有没有简便的方法?
2.channelList的数据比较多,仅仅因为修改某一个部分,就通过setData更新了整个channelList数据,会不会明显影响性能?
clipboard.png

阅读 5.2k
2 个回答

了解一下wx:key的概念

https://mp.weixin.qq.com/debu...

当数据改变触发渲染层重新渲染的时候,会校正带有 key 的组件,框架会确保他们被重新排序,而不是重新创建,以确保使组件保持自身的状态,并且提高列表渲染时的效率。

可以实现虽然是全部修改、但是是部分渲染

channelList是引用类型变量,并不需要执行this.setData

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题