Immutable.js-地图不会使嵌套对象不可变

时间:2019-03-22 00:27:32

标签: javascript immutable.js

我正在这样设置地图:

import { Map } from 'immutable';

const initialState = {
   a: "test",
   b: {
    inside: "inside value"
   }
} 

const otherState = {
   c: "other value"
}

 const myState = new Map({ app: new Map(initialState).merge(otherState) });

这似乎是可行的,但是当我尝试更改嵌套对象内的值时,它似乎对我却不起作用(我得到了“无效的键路径”)。所以尝试:

myState.setIn(['app', 'b', 'inside'], 'newValue'); 

给我一​​个“无效的密钥路径”错误。看起来当我注销时,嵌套对象没有变成不可变的。不确定我做错了什么。

编辑-这是一个显示问题的代码笔-https://codepen.io/ajmajma/pen/rRQoZp

1 个答案:

答案 0 :(得分:1)

显然,鉴于['app', 'b', 'inside']app对象的唯一属性,正确的路径应该是myState

您还需要Immutable.fromJS()initialStateotherState对象,否则嵌套键将被视为JS对象,而不是immutablejs映射。

const myState = new Map({ app: new Map(Immutable.fromJS(initialState)).merge(Immutable.fromJS(otherState)) });