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

时间:2018-09-29 19:38:42

标签: reactjs redux immutable.js

我正在尝试更新一个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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

您只需要更改LOAD_DATA减速器即可使用它:

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

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

如果使用List(),则还必须明确导入!

答案 1 :(得分:0)

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

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