Appearance
参考
为什么使用Immutable
React.js 是一个 UI = f(states) 的框架,为了解决更新的问题, React.js 使用了 virtual dom , virtual dom 通过 diff 修改 dom ,来实现高效的 dom 更新。
但是有一个问题。当 state 更新时,如果数据没变,你也会去做 virtual dom 的 diff ,这就产生了浪费。这种情况其实很常见
可以使用PureComponent来避免不必要的更新,但其只是浅比较,无法判断组件的修改?自己去做复杂比较的话,性能又会非常差
在react中为了保证纯函数和state的变化,需要写大量的{...state}之类的代码,可以使用Immutable 来处理。
方案就是使用 immutable.js 可以解决这个问题。因为每一次 state 更新只要有数据改变,那么 PureRenderMixin 可以立刻判断出数据改变,可以大大提升性能
Immutable.js 需要使用其内置的api来操作数据,比较繁琐,且需要区分是 Immutable 对象还是原生对象,容易混淆操作。对现有代码的迁移成本也很高,可以使用immer.js
优点
- 降低 Mutable 数据变化带来的复杂度
- 节省内存空间
- Undo/Redo,Copy/Paste,随意穿越!
- 拥抱函数式编程
缺点
- 容易与原生对象混用
- 对已有代码侵入性较强,迁移成本较高
- 开发效率和应用项目之前需要平衡