下一个项目中打算在redux中使用Immutable.js。在此对一些API进行简单记录。日后用到其它也会慢慢补充 Immutable的中文翻译就是不可变,所以。...对Immutable对象每一个操作都是返回的一个新的对象。...寒假的时候再看看这个库的源码吧, 文档地址 Immutable中的一些数据结构 Map 无序键值对(有点像js的Object) 设置 set (对应delete、deleteAll)/ setIn...5, "y": 10 }, // "b": Map { "x": 20, "y": 10 }, // "c": Map { "z": 3 } // } filter map toJS 深转化js...对象 toJSON 浅转化js toArray 浅转化 toObject 浅转化 读取 get/getIn List 类似于js的数组 OrderedMap 有序键值对(按照设置的顺序?)
value.toList() : value.toOrderedMap()) }) 2. toJS() 作用 : 将一个Immutable数据转换为JS类型的数据 用法 : value.toJS()简介...: value是要转变的数据 3. is() 作用 : 对两个对象进行比较 用法 : is(map1,map2) 简介 : 和js中对象的比较不同,在js中比较两个对象比较的是地址,但是在Immutable...'); x === y; // false 处理这一问题的另一种方式是通过 setter 设置 flag 对脏数据进行检查,但冗杂的代码是在让人头疼 seamless-immutable 与 Immutable.js...而 Immutable.js 压缩后下载有 16K。...,Immutable.js 是一个不错的选择。
Immutable.js Immutable的优势 1. 保证不可变(每次通过Immutable.js操作的对象都会返回一个新的对象) 2. 丰富的API 3....与原生JS交互不友好 (通过Immutable生成的对象在操作上与原生JS不同,如访问属性,myObj.prop1.prop2.prop3 => myImmutableMap.getIn([‘prop1...难以调试 (可以采用 Immutable.js Object Formatter扩展程序协助) 6....不要混合普通的JS对象和Immutable对象 (不要把Imuutable对象作为Js对象的属性,或者反过来) 2. 对整颗Reudx的state树作为Immutable对象 3....高阶组件返回一个新的组件,该组件接受Immutable参数,并在内部转为普通的JS对象 2.
深入探究immutable.js的实现机制(一)[1] 深入探究immutable.js的实现机制(二) 本篇 上一篇我们研究了 Immutable.js 持久化数据结构的基本实现原理,对其核心数据结构...采用位分区的根本原因是为了优化速度,而对于空间的优化, Immutable.js 是怎么做的呢?接下来先探讨下这点。...Immutable.js 参考了HAMT对树进行了高度和节点内部的压缩。...它涉及到 Immutable.js 中的可变数据结构。 Transient 其实可以说 Immutable.js 中的数据结构有两种形态,“不可变”和“可变”。...虽然“不可变”是 Immutable.js 的主要优势,但“可变”形态下的操作当然效率更高。
网上已经有很多文章简单介绍了 Immutable.js 的原理,但大多浅尝辄止,针对 Clojure 或 Go 中持久化数据结构实现的文章倒是有一些。...下面结合多方资料、Immutable.js 源码以及我自己的理解,深入一些探究 Immutable.js 实现机制。...本系列文章可能是目前关于 Immutable.js 原理最深入、全面的文章,欢迎点赞收藏σ`∀´)σ。...vector trie,这是Clojure里使用的一种数据结构,Immutable.js 里的相关实现与其很相似),我们先了解下它的基本结构。...Immutable.js 实现了一个?hash函数,可以把一个值转换成相应数字。
Immutable.js是一个为 JavaScript 提供不可变集合的库,其灵感来源于 Clojure[脚本] 的不可变数据结构。它由 Facebook 开发。...本文中我们会讲到在一个常见情形中, immutable.js比 javascript会快得多:不修改原数组的情况下向数组添加元素。...而 immutable.js的 push的返回一个添加了新元素的新列表;而且,这非常快。 ?...不可变列表对决 JavaScript 数组 首先,在浏览器中加载 immutable.js: Object.keys(Immutable) 这里有一个计算代码执行时间的 benchmark函数: function...在我的计算机上, immutable.js的 push比原生 javascript的 push快约 100 倍。 注意,在往 immutable.js列表中添加元素时,列表本身并未改变。
不少文章已经写到过使用不可变数据的优点,主要包括: 简化贯穿程序的数据流 不再需要数据复制的防御机制 优化对数据变化的检测 通过记忆化(memoization)技术提高程序性能 Immutable库 Immutable...我们使用redux-immutable模块将这个库整合进我们的程序,这样我们就能以Immutable库提供的数据类型来存储程序状态(app state)了。...然而,和React之类的框架比起来,Immutable库的文档极其不完整。 不清楚Immutable库句法,或者代码无法像预想的那样起作用时,开发人员都会求助于文档,不过常常是看了还不明白。...终端日志打印出来的Immutable库对象 要解决这个问题,可以在任何Immutable库的对象上调用toJS()函数,把对象转换成一个纯JavaScript对象,再打印出来。...结果 为了使用Immutable库,我们重组了一些组件的代码。然后我们重新评估了目前所处的局面,讨论了上面讲的那些方面,结论就是Immutable库唯一的好处就是能强化不可变性,但意义何在?
定义 Immutable --- 不可变 final --- java final关键字 关于final关键字有一点思考。就像最近在思考的另一句话:不能听命自己者,必将受制于他人!...也就是标题的Immutable? 不可变对象的好处。容易解释,状态在一经创建就无法修改,我们可以在创建的时候顺便校验下,那么该对象在其生命周期内都是合法的属性。...但是为何scala的作者如此设计,也是为了考虑immutable的重要性吧,毕竟scala也可以成为java++的。虽然用得少,不代表不厉害,scala语言太过于灵活可能也是使用者相对较少的原因之一。
v16.8全家桶(react,react-router) : 用于构建用户界面的 MVVM 框架 redux: 著名JavaScript状态管理容器 redux-thunk: 处理异步逻辑的redux中间件 immutable...ImmutableJS) react-lazyload: react懒加载库 better-scroll: 提升移动端滑动体验的知名库 styled-components: 处理样式,体现css in js...5、JS变量名(包括函数名)采用小驼峰的方式,组件名或者styled-components导出的样式容器名都采用大驼峰,常量名所有字母大写。...感谢黄轶前辈vue音乐实战课程,让我学到了非常多的原生JS技能和组件封装技巧。 感谢DellLee react从入门到简书项目实战让我入门React,让我养成了React工程化的编码习惯。
为什么要用immutable对象?...immutable对象有以下的优点: 对不可靠的客户代码库来说,它使用安全,可以在未受信任的类库中安全的使用这些对象 线程安全的:immutable对象在多线程下安全,没有竞态条件 不需要支持可变性,... System.Collections.Immutable.ImmutableDictionary System.Collections.Immutable.ImmutableDictionary... System.Collections.Immutable.ImmutableList System.Collections.Immutable.ImmutableList System.Collections.Immutable.ImmutableQueue...System.Collections.Immutable.ImmutableSortedSet System.Collections.Immutable.ImmutableStack System.Collections.Immutable.ImmutableStack
/immutable-js/docs/#/?...fileGuid=tCVw8Y6Cv8J3KYHw) 中间件的方式实现 Redux 与 Immutable 的搭配使用,对于使用 Redux 的应用程序来说,你的整个 state tree 应该是 Immutable.JS...5.使用 Immutable 需要注意的点 不要混合普通的 JS 对象和 Immutable 对象(不要把 Imuutable 对象作为 JS 对象的属性,或者反过来)。...少用 toJS 方法(这个方法操作非常耗性能,它会深度遍历数据转换成JS对象)。...fileGuid=tCVw8Y6Cv8J3KYHw) Immutable官方文档 (https://immutable-js.github.io/immutable-js/docs/#/?
Range Sum Query - Immutable 题目描述 Given an integer array nums, find the sum of the elements between indices
Range Sum Query - Immutable Desicription Given an integer array nums, find the sum of the elements between
例如 StringBuilder, java.util.Date Immutable object (不可变对象):当对象被创建后,你不能修改对象的状态以及字段,例如包装类,如: Integer, Long...Immutable 在 Spring 的 Autowired 注解中比较重要。...在 Spring 的 Autowired 三种方式中,只有构造方法的 Autowired 是限制对象不能为 NULL 的,主要也是针对 Immutable 的问题。...https://www.ossez.com/t/java-mutable-immutable/13265
Why 为什么 React 需要 immutable How 如何在使⽤ React 使⽤ immutable What 带来的收益和结果 为什么要在React 使⽤ immutable ⼀句话概况:...Immutable 并不意味着我们要详尽地克隆所有对象的 ramifications。这将不会很有效率。我们只需要通过我们改变的路径来创建新的引⽤。 END
Why 为什么 React 需要 immutable How 如何在使⽤ React 使⽤ immutable What 带来的收益和结果 为什么要在React 使⽤ immutable ?...Immutable 并不意味着我们要详尽地克隆所有对象的 ramifications。这将不会很有效率。我们只需要通过我们改变的路径来创建新的引⽤。 END
线程不安全的原因是共享了变量且对该共享变量的操作存在原子性、可见性等问题,因此一种解决思路就是构造不可变的对象,没有修改操作也就不存在并发竞争,自然也不需要额外的锁,同步等操作,这种设计叫做immutable...object模式,本文主要理解这种模式,并学习如何实现一个较好的immutable类。...immutable设计原则 一个比较严格的immutable模式,有如下几种设计原则(来自Java多线程编程实战指南) 类本身是final修饰,防止其子类改变其定义的行为 所有字段都是用final修饰,...immutable设计陷阱 不可变类经常会遇到以下陷阱,他是不可变的吗?...比如系统中有表示用户一次下单购买商品数量的类Quantity,那么考虑到用户一次性购买数量很少大于10,因此这个类设计成immutable并且应用享元模式就可以很好地提高性能。
本期精读的文章是:Immutable 结构共享是如何实现的 鉴于 mobx-state-tree 的发布,实现了 mutable 到 immutable 数据的自由转换,将 mobx 写法的数据流,无缝接入...Map 性能比 Object.assign 更好,是否可以替代 Immutable?...当一层节点达到 1000000 时,immutable.get 查询性能是 object.key 的 10 倍以上。...就性能而言可以替代 Immutable,但就结合 redux 使用而言,无法替代 Immutable。...讨论地址是:Immutable 结构共享是如何实现的? · Issue #14 · dt-fe/weekly
Immutable.js provides many Persistent Immutable data structures including: List, Stack, Map, OrderedMap...1, b: 2, c: 3 }); map.get('a'); // 1 2.2 浏览器方式 下载immutable.min.js,放在自己项目库文件中,然后引用: <script src="<em>immutable</em>.min.<em>js</em>...n)); // false 总结: 1.对于javascript中原始值的比较类似于 Object.is 需要注意的是:NaN在<em>Immutable</em>.<em>js</em>中认为是与自身相等的;+0和-0在<em>Immutable</em>.<em>js</em>.../lib/<em>immutable</em>.<em>js</em>'); console.log(<em>Immutable</em>.Range()); // Range [ 0...Infinity ] console.log(<em>Immutable</em>.Range...<em>Immutable</em>.<em>js</em>的应用主要是在其不变性上,这对于层次比较深的值比较、拷贝上面将会变得十分有用处。
领取专属 10元无门槛券
手把手带您无忧上云