为什么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高得多
在 default 情况下返回旧的 state。遇到未知的 action 时,一定要返回旧的 state。
与React推崇的immutability有关。
在其他framework如angular中,侦知一个变量变化通过watch和deepwatch,尤其deepwatch在判断一个数据量大的变量是否变化时会消耗很多资源,导致应用性能下降。
在React中,通过“有变化,就一定返回一个新对象;没变化,原对象不做变化直接返回”的原则,永远可以通过判断“新旧变量是否对同一内存内容的引用”来侦测变化,效率上比deepwatch高得多