欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

为什么React中this.state不要直接修改,而是创建新的副本

程序员文章站 2022-07-03 13:24:34
...
不要修改 state。 使用 Object.assign() 新建了一个副本。不能这样使用 Object.assign(state, { visibilityFilter: action.filter }),因为它会改变第一个参数的值。一定要把第一个参数设置为空对象。也可以使用 ES7 中还在试验阶段的特性 { ...state, ...newState },参考 对象展开语法。

在 default 情况下返回旧的 state。遇到未知的 action 时,一定要返回旧的 state。
与React推崇的immutability有关。
在其他framework如angular中,侦知一个变量变化通过watch和deepwatch,尤其deepwatch在判断一个数据量大的变量是否变化时会消耗很多资源,导致应用性能下降。

在React中,通过“有变化,就一定返回一个新对象;没变化,原对象不做变化直接返回”的原则,永远可以通过判断“新旧变量是否对同一内存内容的引用”来侦测变化,效率上比deepwatch高得多
相关标签: Rack