javascript - 不可变 setIn 嵌套对象返回无效的 keyPath 错误

标签 javascript immutable.js

我有以下对象:

const initialState = Map({
  posts: {
    most_popular: [],
    trending: [],
    latest: [],
  }
});

我正在尝试更新条目中的子对象。这是我尝试过的:

intialState.setIn(["posts", "most_popular"], ["array", "of", "values"]);

运行这个设置命令会返回

Uncaught Error: Invalid keyPath()

我错过了什么吗?我不需要创建子 map ,对吗?例如

const initialState = Map({
      posts: Map({
        most_popular: [],

显然这行不通(我试过),但也许还有另一种设置子对象的方法?

编辑:

获取对象,并像这样更新:

state.get("entries").most_popular = ["k"];

但这意味着我的 entries.most_popular(趋势,最新)不是一成不变的?有没有办法让子对象不可变?

最佳答案

不使用 Map(),而是使用 fromJS()。如果你使用Map(),那么你的键most_popular下的数组是一个标准的JS对象,而不是一个Immutable.js结构。

因此:

const initialState = fromJS({
  posts: {
    most_popular: [],
    trending: [],
    latest: [],
  }
});

现在一切都是不可变对象(immutable对象)。然后你可以轻松地做到:

initialState.setIn(["posts", "most_popular"], ["array", "of", "values"]);

关于javascript - 不可变 setIn 嵌套对象返回无效的 keyPath 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38911578/

相关文章:

javascript - 修改折叠/展开效果的高度

JavaScript 继承和构造函数属性

javascript - 如何实现不变性

javascript - 如何将新项目推送到 immutableJS 中的深层嵌套记录中

javascript - 如何使用 Immutable.js 提供 Flux 存储之间的依赖关系?

javascript - 如何控制Chrome中JavaScript的错误显示,例如404错误?

javascript - appendChild 的表单验证

c# - 将 js 值作为参数发送给 js 函数

reactjs - React 中 Immutable.js 序列的循环计数错误

javascript - 为什么 Map() === Map() 评估为真?