Immutable.js
使用不可变数据类型的头一条理由肯定是能够保证做项目的人不能违反不可变原则。 严格地说,Immutable.js 库有助于简化开发过程,因为大家不再需要在代码中追踪数据,寻找数据变更的位置。不可变数据类型取而代之,能始终精确表现当前存储对象(store)中存储的程序状态。
有了这种库,就能发挥上述不可变数据类型的优点,但缺点也确实存在
不便与调试
如果要查看数据直接使用 console.log 需要翻来覆去的深层次的找,如果使用 toJS() 它自带的转换则一定层度上减缓开发速度。 javascript 语法错误就不存在了,若 a.b.w.d ‘w’ 对象名称写错了,现在得到的只会是一个 undefined 而真正的问题无法得知。
不便与迁移
1.toJS() 可以把Immutable对象转换成普通对象,不难免的会在代码中用到(例如与服务器交互),但如果该对象较为深,则性能消耗的代价也是巨大的,PC 端这一点可以忽略,但移动端则需要考虑,包括 fromJS
不符合主流ES6原生代码的格式
比如 ES6 的解构,就变成了只能使用 get() 或 getIn(),若 props 携带有一定数量,则会带来更多的冗长代码,ES6 的 … 扩展语法也是
压缩后的 Immutable.js 大约 57kb
配合redux的话,中间必用来做转换的 redux-Immutable 引入了整个 Immutablejs 库 无法做 Tree shaking 代码缩减优化
侵入性强
例如引用第三方组件的时候,不得不进行数据转换
入手不易
需要对 Immutable.js 一套 api 进行熟悉才可上手
这是我总结的一些缺点,最终发现 缺点大过了缺点,最后想问一个问题,现在移动端项目盛行,若对于移动端项目而言,Immutable.js 是否真的合适?如果只是为了 不可变 约束,immutability-helper 这类更加更加贴近原生的库是不是要更合适一些
最后补充一句:我不是否定 Immutable.js 是个很好的库,和同期发布的 React 一样它也很让人称赞的!
哲学问题,请转头fp
@i5ting 。。。fp?–! 没有懂
@yuanzhhh 函数式编程
@i5ting 啊 转头fp,您的意思是。。。?我没 get 到你说的点
@yuanzhhh 如果不可变类型不结合函数式编程确实没啥用,你没说错,但你没理解不可变类型的应用场景
@i5ting 嗯嗯,不可变类型乃函数式编程的必要,这个了解;可能我有表达错,我拿移动端来说这事儿也是因为最近项目选型时与同事发生的矛盾(也存在一点私心的宣泄吧…),其实我不是否定 Immutable.js 是个很好的库,和同期发布的 React 一样它也很让人称赞,但基于选型这事儿,我就想表达下说,不是选用最好的,应更多的考虑更适合的
git 场景就是用了不可变量
我也很不喜欢 Immutable, 不可变对象思想上是好的, 但引入 Immutable 更容易让小(zhu)伙(dui)伴(you) 写出神奇的代码