在 Immutable.js 中使用 React 的不可变助手

Posted

技术标签:

【中文标题】在 Immutable.js 中使用 React 的不可变助手【英文标题】:Using React's immutable helper with Immutable.js 【发布时间】:2015-02-01 20:48:11 【问题描述】:

我正在开发助焊剂应用程序,并正在考虑采用immutable.js 来维护状态。我看到 react 提供了它自己的帮助器来更新不可变对象(http://facebook.github.io/react/docs/update.html),但不知道它与不可变自己的 setIn 和 updateIn 方法有什么不同(即,我已经可以用 === 比较对象来判断它们随 setIn 变化)。是否有理由将 react 助手与 immutable.js 一起使用?只是语法糖吗?

TL;DR 是:

var map = Immutable.fromJS(bar: 'baz');
map2 = React.addons.update(map, 
        bar: $set: 'foo'
    );

不同于

var map = Immutable.fromJS(bar: 'baz');
map2 = map.set('bar', 'foo');

【问题讨论】:

【参考方案1】:

React.addons.update 不适用于 Immutable.js 值;它works with plain javascript objects and arrays。

var map =  bar: 'baz' ;
var map2 = React.addons.update(map, 
  bar: $set: 'foo'
);
console.log(map2); // A plain JS object of value `bar: 'foo'`

Immutable.js 中的类型使用special 数据structures 来实现性能和空间优势;显然,React.addons.update 使用和生成的普通 JavaScript 对象不是。

【讨论】:

以上是关于在 Immutable.js 中使用 React 的不可变助手的主要内容,如果未能解决你的问题,请参考以下文章

将 Flux 存储中的 Immutable.js 映射与内部 React 组件状态合并

是否可以在 React-Redux 应用程序中使用 Immutable.js 来比较 shouldComponentUpdate 中的道具?

Immutable.js 以及在 react+redux 项目中的实践

使用 immutable.js 的 react shouldComponentUpdate 的最佳实现是啥

React+Immutable.js的心路历程

TypeScript 的 `readonly` 可以完全替代 Immutable.js 吗?