2

我是 immutable.js 的新手,并试图找出一种更新嵌套地图的方法

这是我的对象

let state = OrderedMap({
    'name': Map({ id: 'name', hint: 'Search by name', value: '' }),
    'job': Map({ id: 'job', hint: 'Search by job title', value: ''}),
    'state':  Map({ id: 'state', hint: 'Search by state', value: ''})
});

我正在尝试使用 setIn 函数设置“名称”对象的值

state.setIn(['name', 'value'], 'Test');

该值未按预期更新。我在这里有什么遗漏吗

4

3 回答 3

3

setIn不会改变原始的state,但是它会返回另一个,所以你基本上会拥有

state = state.setIn(['name', 'value'], 'Test');
于 2017-12-01T17:44:51.380 回答
1

我从来没有使用过不可变的,但在我看来,文档是在说你想要更多类似的东西:

setIn(state, ['name', 'value'], 'Test');

您在哪里传递集合,而不是使用点运算符在其上运行函数。

https://facebook.github.io/immutable-js/docs/#/setIn

于 2017-12-01T17:42:08.193 回答
1

而不是改变您可以使用的状态,setIn因为这将返回一个新副本,所以您可以执行以下操作:

state = state.setIn(['name', 'value'], 'Test');

您可以在Facebook Github上阅读更多内容

于 2017-12-01T17:47:27.900 回答