我正在设置这样的地图:
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']
,因为 app
是 myState
对象的唯一属性。
您还需要Immutable.fromJS()
您的initialState
和otherState
对象,否则嵌套键被视为JS对象,而不是ImmutableJs Maps。
const myState = new Map({ app: new Map(Immutable.fromJS(initialState)).merge(Immutable.fromJS(otherState)) });