由于不可变的js,额外的字段被添加到redux商店,如何阻止它?

时间:2017-01-04 11:09:09

标签: javascript ecmascript-6 redux immutable.js

背景

我有一个使用不可变js的react redux应用程序。

问题

在大多数情况下,这是完美的工作,但应用程序中的一些减速器正在向我的redux商店添加几个额外的字段。

实施例

我能看到的字段如下

  • _root
  • __改变
  • 尺寸

这只会在某些时候发生。当我使用也合并当前状态的reducer时。

case ActionType.SUCCESS_GET_DATA : {
    let newState = { ...state, [action.meta]: action.payload };
    return state.merge(newState);
}

其中:action.meta是数据的唯一键/名称,action.payload是成功检索的数据。

问题

所以我可以看到使用spread运算符创建一个新状态会导致这些额外的字段被添加到我的状态。那么有没有办法使用扩展运算符而不添加这些额外的字段?

1 个答案:

答案 0 :(得分:0)

不可变地图总会添加自己的'meta'

所以我得出的结论是,Immutable地图总是会为状态添加自己的元数据。这是因为它的地图与对象合并。

要解决此问题,请使用方法toJS()

case ActionType.SUCCESS_GET_DATA : {
    let jsState = state.toJS();
    let newState = { ...jsState, [action.meta]: action.payload };
    return state.merge(newState);
}

现在您正在将对象与对象合并。