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

IT技术 javascript reactjs reactjs-flux
2021-05-03 11:48:09

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

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 值;适用于普通的 JavaScript 对象和数组

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 中的类型使用特殊的数据结构实现;React.addons.update 消耗和生成的纯 JavaScript 对象显然不是。