Eva*_*kas 6 typescript immutable.js ngrx
根据Ngrx存储不可变状态和数组的答案?问题,maxime1992声明他不建议将Immutable.js与ngrx一起使用.
我知道将Immutable.js与redux一起使用是一种广泛传播和正常做法,以便在商店更改时强制实现不变性,但为什么不会有人想在Angular应用程序上做同样的事情.库应该比扩展运算符更好地处理不可变数据变化.
那么将Immutable.js与ngrx一起使用有什么用呢?
我可以尝试提供更多信息:)
我知道将Immutable.js与redux一起使用是一种广泛传播和正常的做法
我想看一下这个趋势图.我打赌,因为ES6号码没有上升.
几年前,当不变性模式开始在前端世界蔓延时,很多人都不习惯它.因此,Immutable.js很好地隐藏了不变性背后的"复杂性",并以非常优化的方式处理着名的结构.
另外,当我在一年半前开始一个巨大的Angular项目时,我不得不决定是否使用Immutable.js.我决定采用它,因为它的表现似乎令人难以置信.Angular cli使用Typescript生成项目(我很高兴它!).但几个星期后,我注意到Immutable.js在使用Typescript方面确实表现不佳(也许它在此期间确实发生了变化,因为我从未再次使用过它,因此无法说出来).而且我宁愿选择一个代码很好的代码而不是一个lib来处理我的不变性.因此,经过2个月的开发,我决定制作一个huuuuge重构并删除immutablejs以使用大多数纯JS(map,filter,它们返回新的引用).
如果您采用以下(来自immutablejs网站):
import Immutable from require('immutable');
var map1: Immutable.Map<string, number>;
map1 = Immutable.Map({a:1, b:2, c:3});
var map2 = map1.set('b', 50);
map1.get('b'); // 2
map2.get('b'); // 50
Run Code Online (Sandbox Code Playgroud)
如果您决定重命名商店的一部分,请运气好找到以下内容: map1.get('b');
而对于纯JS,你根本就没有问题,如果忘记重命名,那么Typescript会抛出一个错误.
确实,我的代码库周围有大量的传播对象,即使发现它很容易阅读,也就是"样板".
现在,谈到ngrx,他们创建了一个非常好的库来处理大部分问题,称为@ngrx/entity.
关于perfs,我一直在研究两个巨大的应用程序,并且没有问题.特别是自发布createSelector应用memoization 的函数以避免每次存储更改时重新计算所有选择器.
所以当你说
库应该比扩展运算符更好地处理不可变数据变化.
我要说你根本不用担心.真.亲自尝试,创建一个Stackblitz并尝试用大量对象编写一个小测试/基准测试,您可以随时添加/更新.几个月前我用极大的数组/对象完成了这一点,它完全没问题.
总之,最大的问题是类型推断.但是在我看来你也不需要它.如果您害怕错过有关不变性的内容,您应该只使用开发模式https://www.npmjs.com/package/ngrx-store-freeze,如果您尝试从商店中改变对象,则会抛出错误.
| 归档时间: |
|
| 查看次数: |
1169 次 |
| 最近记录: |