immer分享摘要

文档: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 对象。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容