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

时间:2016-08-12 06:46:48

标签: javascript immutable.js

我有以下对象:

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

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

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

运行此set命令将返回

Uncaught Error: Invalid keyPath()

我错过了什么吗?我不需要创建子地图吗? E.g

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

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

编辑:

获取对象并进行更新如此有效:

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

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

1 个答案:

答案 0 :(得分:1)

不使用Map(),而是使用fromJS()。如果使用Map(),则键{{1​​}}下的数组是标准JS对象,而不是Immutable.js结构。

因此:

most_popular

现在一切都是不可变的对象。然后你可以很容易地做到:

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