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'],因为 appmyState 对象的唯一 属性。

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

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