Immutablejs - 映射不会使嵌套对象不可变
Immutablejs - map not making nested objects immutable
我正在这样设置地图:
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) });
这似乎有效,但是当我尝试更改嵌套对象内的值时,它似乎对我不起作用(我得到 "invalid keypath")。所以尝试:
myState.setIn(['app', 'b', 'inside'], 'newValue');
给我一个 "invalid keypath" 错误。它看起来像当我注销时嵌套对象没有变成不可变的。不确定我做错了什么。
编辑 - 这是一个显示问题的代码笔 - https://codepen.io/ajmajma/pen/rRQoZp
显然正确的路径应该是 ['app', 'b', 'inside']
,因为 app
是 myState
对象的唯一 属性。
您还需要 Immutable.fromJS()
您的 initialState
和 otherState
对象,否则嵌套键将被视为 JS 对象,而不是 immutablejs 映射。
const myState = new Map({ app: new Map(Immutable.fromJS(initialState)).merge(Immutable.fromJS(otherState)) });
我正在这样设置地图:
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) });
这似乎有效,但是当我尝试更改嵌套对象内的值时,它似乎对我不起作用(我得到 "invalid keypath")。所以尝试:
myState.setIn(['app', 'b', 'inside'], 'newValue');
给我一个 "invalid keypath" 错误。它看起来像当我注销时嵌套对象没有变成不可变的。不确定我做错了什么。
编辑 - 这是一个显示问题的代码笔 - https://codepen.io/ajmajma/pen/rRQoZp
显然正确的路径应该是 ['app', 'b', 'inside']
,因为 app
是 myState
对象的唯一 属性。
您还需要 Immutable.fromJS()
您的 initialState
和 otherState
对象,否则嵌套键将被视为 JS 对象,而不是 immutablejs 映射。
const myState = new Map({ app: new Map(Immutable.fromJS(initialState)).merge(Immutable.fromJS(otherState)) });