1
seki 2020-04-21 11:15:24 +08:00
你说的 setState 的写法没什么问题
所谓的数据不可变指的是 state 里面的变量不能被 mutate 比如 state.foo 是一个 array,于是下面的写法就是有问题的 const { foo } = this.state foo.push(1) this.setState({ foo }) |
2
randyo 2020-04-21 11:16:55 +08:00 via Android
|
3
shintendo 2020-04-21 11:21:21 +08:00
你举的这个例子,跟数据不可变没什么关系吧
|
4
otakustay 2020-04-21 11:27:28 +08:00
state 是个数据的容器,本身不是数据。state 里面的每一个属性才是数据
容器没必要不可变,但容器里面的数据必须不可变 |
5
roscoecheung1993 2020-04-21 11:42:53 +08:00
不可变数据只需要一次浅比较就可以确定整棵子树是否需要更新,merge 视情况可能需要遍历组件树到比较深的层级,在 state 复杂的时候不可变数据会有性能提升。其他好处还包括方便做快照,方便 debug 等等。。
|
6
kwoktung OP @roscoecheung1993 方便做快照和方便 debug 怎么说?有例子吗?
|
7
roscoecheung1993 2020-04-21 14:14:07 +08:00
@kwoktung 参考二楼的链接和 react 文档性能优化一节,简单来说数据不可变的结果是每次更新使用全新的一整个对象,更方便记录
|
8
linZ 2020-09-22 11:32:21 +08:00 1
一旦你的子组件,从 props.a.b 获取内容时,如果 b 改变而 a 没有不变,那么你的子组件并不会变化。到时候会蛋疼的很。当然,你可以用 useEffect,然后把 props.a.b 放入依赖中,我猜就解决这个问题了。(我猜的,不过这么写也太难受了吧)
|