不可变的 js UpdateIn 正在存储数字而不是对象

Immutable js UpdateIn is storing number instead of object

我正在尝试更新一个 immutablejs 对象;

//action.vals = {element: "p", type: "text", content: "test", className: "paragraph-topic"}
return state
    .updateIn(['contents'], list => list.push(action.vals))         //<<<<<THis is failing
    .set('loading', false)
    .set('error', false)
  break;`

而是存储 10 一个整数。

我真的很困惑,我需要帮助建议。

Here is my full code

非常感谢任何帮助!由于缺乏正确的使用文档,我快疯了

使用 ... 做一些这样的事情。

.updateIn(['contents'], list => [...list, action.vals])

我注意到在 LOAD_DATA reducer 上,您将 contents 设置为数组而不是不可变列表:

case LOAD_DATA:
  return state
    .set('loading', true)
    .set('error', false)
    .setIn(['contents'], [])

这会导致很多问题。发生的事情是您在更新中使用了香草 JS push 函数,并且 returns 数组的 length 。所以我假设 contents 有 10 个元素?

您只需更改 LOAD_DATA reducer 即可:

.setIn(['contents'], fromJS([]))

.setIn(['contents'], new List())

如果使用 List(),也必须显式导入!