Immutable.js

不可变数据集合
授权协议 BSD
开发语言 JavaScript
所属分类 Web应用开发、 常用JavaScript包
软件类型 开源受限软件
地区 不详
投 递 者 谭仰岳
操作系统 跨平台
开源组织 Facebook
适用人群 未知
 软件概览
温馨提示:该项目除了使用 BSD 协议授权外,还需遵守附加的 专利授权

Immutable 是 Facebook 开发的不可变数据集合。不可变数据一旦创建就不能被修改,使得应用开发更简单,允许使用函数式编程技术,比如惰性评估。Immutable JS 提供一个惰性 Sequence,允许高效的队列方法链,类似 mapfilter ,不用创建中间代表。

immutable 通过惰性队列和哈希映射提供 Sequence, Range, Repeat, Map, OrderedMap, Set 和一个稀疏 Vector

开始使用

使用 npm 安装 immutable

npm install immutable

每个模块都要包括:

var Immutable = require('immutable'); var map = Immutable.Map({a:1, b:2, c:3});

浏览器

在浏览器中使用 immutable,需要下载 dist/Immutable.min.js

然后,作为脚本标签添加到你的页面中:

<script src="Immutable.min.js"></script> 
<script>
 var map = Immutable.Map({a:1, b:2, c:3});
 map = map.set('b', 20);
 map.get('b'); // 20 
</script>

或者使用 AMD 加载器 (比如 RequireJS):

require(['./Immutable.min.js'], function (Immutable) {
     var map = Immutable.Map({a:1, b:2, c:3});
     map = map.set('b', 20);
     map.get('b'); // 20 });
  • 本篇只是对Immutable.js的简单介绍,后续会继续分享其具体实践应用。 什么是Immutable Data? Immutable data encourages pure functions (data-in, data-out) and lends itself to much simpler application development and enabling techniques

  • Immutable.js JavaScript数据修改的问题 看一段大家熟悉的代码 const state = { str: 'wwming', obj: { y: 1 }, arr: [1, 2, 3] } const newState = state console.log(newState === state) // true 由于js的对象和数组都是引用类型。

  • Immutable.js 简介 Immutable.js是由 Facebook 工程师( Lee Byron) 花费 3 年时间打造,与 React 同期出现,虽然没有被默认放到 React工具集里,但是它的价值还是非常大的。它内部实现了一套完整的持久化数据结构( Persistent Data Structure ),还有很多易用的数据类型(像 List、Map)。有非常全面的函数式操作方法(

 相关资料
  • 正如你可以看到在这种情况下,虽然我们更改了的值,的值没有改变。 这是因为的类型,是不可变的。 在JavaScript内置类型中,以下是不可变的: Boolean Number Symbol Null Object Array String是一种不常见的情况,因为它可以使用进行迭代,并像数组一样提供数字索引器,但会执行以下操作:

  • 目录 不变性(immutability)的好处有哪些? 为什么 Redux 需要不变性? 为什么 Redux 对浅比较的使用要求不变性? - 浅比较和深比较有何区别? - Redux 是如何使用浅比较的? - combineReducers 是如何进行浅比较的? - React-Redux 是如何使用浅比较拗的? - React-Redux 是如何使用浅比较来决定组件是否需要重新渲染的? - 为什

  • 不可变数据 ClojureScript 中默认采用不可变数据作为底层实现. cljs 当中实现了 Persistent Data Structure, 虽然是不可变数据, 但创建新数据一般会进行结构复用, 也就是说, 比如下面这个例子, b 在内部实现中就可以复用 a 的某些部分 (def a {:a 1 :b 2}) ; #'cljs.user/a (assoc a :c 3) ; {:a 1,

  • 问题内容: 我指的是Apple的Swift编程指南,以了解如何用Swift语言创建可变/不可变对象(数组,字典,集合,数据)。但是我不明白如何在Swift中创建一个不可变的集合。 我希望在Objective-C中看到以下Swift中的等效项 不变数组 可变数组 不变字典 可变字典 问题答案: 创建不可变数组 第一种方式: 第二种方式: 创建可变数组 将对象追加到数组 辞典 创建不可变字典 创建可变

  • 问题内容: 从Java 1.6 Collection Framework文档中 : 不支持任何修改操作(如类别,和)被称为 不可修改的 。[…]额外保证Collection对象中的任何更改都将不可见的Collection被称为 不可变的 。 第二个标准使我有些困惑。鉴于第一个集合是不可修改的,并且假定原始集合引用已被删除,那么第二行中提到的更改是什么?它是指集合中包含的元素的变化,即元素的状态吗?

  • 不可变集合是不可被修改的, 集合的数据项是在创建的时候提供, 并且在整个生命周期中都不可改变. Immutable对象有以下的优点: 对不可靠的客户代码库来说,它使用安全,可以在未受信任的类库中安全的使用这些对象 线程安全的:immutable对象在多线程下安全,没有竞态条件 不需要支持可变性, 可以尽量节省空间和时间的开销. 所有的不可变集合实现都比可变集合更加有效的利用内存 (analysis