不可能 - 地图不会使嵌套对象不可变



我正在设置这样的地图:

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'); 

给我一个"无效的键盘"错误。看起来就像我记录下来的那样,嵌套的对象没有变不变。不确定我在做什么。

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

显然,正确的路径应为 ['app', 'b', 'inside'],因为 appmyState对象的唯一属性。

您还需要Immutable.fromJS()您的initialStateotherState对象,否则嵌套键被视为JS对象,而不是ImmutableJs Maps。

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

最新更新