omi icon indicating copy to clipboard operation
omi copied to clipboard

【OMIX】对于wx:for="{{$.logs}}",给logs push新的一条记录后的setData方式确认

Open wubinsheng2017 opened this issue 4 years ago • 6 comments

请问下OMIX的一个场景实现方式, 对于wx:for="{{$.logs}}"使用的logs,给logs push新的一条记录后, 是等价于下面哪个方式? 方式1、this.setData({ logs: push之后的logs })

方式2、 this.setData({ ["logs[新index]"]: 新log })

wubinsheng2017 avatar Nov 21 '19 16:11 wubinsheng2017

好问题,等价于 2。这里特别优化过。

dntzhang avatar Nov 22 '19 00:11 dntzhang

具体源码 https://github.com/Tencent/omi/blob/master/packages/omix/utils/create.js#L217-L221

dntzhang avatar Nov 22 '19 01:11 dntzhang

@dntzhang 顺便借楼咨询一下有实现多值及多次 setData 的聚合吗? case 1: setData({a:1, b: 2}) 是一次跨层通信,现在写成 this.store.data.a = 1; this.store.data.b = 2 有优化吗?

case 2: setData({a:1}), setData({b:2}),一些框架会用 nextTick 聚合成一次,omix 这种有吗?

aolu11 avatar Dec 12 '19 05:12 aolu11

@aolu11 没有优化,可以感觉可以包一下。

omix(()=>{
 this.store.data.a=1
 this.store.data.b=2
})

dntzhang avatar Dec 12 '19 07:12 dntzhang

@dntzhang

嗯,我猜想可能是没有,因为要优化 case 1,无非最终还是回到 westore 的老路,弄个 update() 的 API,当然现在已经有了直接赋值,update 语义就不好了,比如可能叫 batch(),或者你说这种,总归是要搞个单独的 API

case 2 可能就依赖基础库 2.2.3(wx.nextTick,或者自己实现一个定时器来buffer,有点杂)

实际上导致 setData 性能问题的主要还是已经优化的长列表问题,这两种无非是写码时候的心理性的优化,也无所谓了

aolu11 avatar Dec 12 '19 10:12 aolu11

好问题,等价于 2。这里特别优化过。

了解了,感谢!

wubinsheng2017 avatar Dec 13 '19 06:12 wubinsheng2017