文档:https://juejin.cn/post/6844904111402385422
1、immutable解决了什么问题?
数据分为基本类型和引用类型,多出引用同一处数据源,并加以修改,就会出现不可预测的问题。
那就再每次修改数据源的时候,深拷贝一份数据源,在拷贝的数据上做操作? 浪费内存,消耗性能。
所以在 2014 年,facebook 的 immutable-js 横空出世,即保证了数据间的 immutable ,在运行时判断数据间的引用情况,又兼顾了性能。
Immutable 实现的原理是 Persistent Data Structure(持久化数据结构),也就是使用旧数据创建新数据时,要保证旧数据同时可用且不变。同时为了避免 deepCopy 把所有节点都复制一遍带来的性能损耗,Immutable 使用了 Structural Sharing(结构共享),即如果对象树中一个节点发生变化,只修改这个节点和受它影响的父节点,其它节点则进行共享。
immer与 immutable-js 最大的不同,immer 是使用原生数据结构的 API 而不是像 immutable-js 那样转化为内置对象之后使用内置的 API。所有具有副作用的逻辑都可以放进 produce 的第二个参数的函数内部进行处理。在这个函数内部对原来的数据进行任何操作,都不会对原对象产生任何影响
-immersed原理:Immer 源码中,使用了一个 ES6 的新特性 Proxy 对象。