0

我正在使用无缝不可变和 redux,并且在更新状态时遇到了一个奇怪的错误。这是我的代码,没有动作返回或 combineReducers 之类的位。只是正在运行/导致错误的垃圾。

初始状态

{ 
  things: {
    fetching: false,
    rows: []
  }
}

动作处理器

export default {
  [DEALERS_REQUEST]: (state, action) => {
    return Immutable({ ...state, fetching: true });
  },
  [DEALERS_RECEIVE]: (state, action) => {
    return Immutable({ ...state, rows: action.payload, fetching: false });
},

带有 thunk 的中间件

export const thingsFetch = (data) => {
  return (dispatch, getState) => {
    dispatch(thingsRequest());
    dispatch(thingsReceive(data));
  }
}

现在,奇怪的是,如果我将这两个动作一起运行,一切都很好。

如果我只 dispatch thingsRequest(),我会收到“无法推送到不可变对象”错误。

我尝试过使用 set、update、replace、merge 等方法,但它们通常返回“this.merge is not a function”。

我是在程序上做错了什么,还是应该联系模块开发人员报告问题?

4

1 回答 1

0

这个问题是,在空数组的情况下,组件试图用它自己的错误消息写回不可变对象。

为了解决这个问题,我将道具传递为可变的。还有一些 redux-immutable 模块取代了所有应用程序的传统连接函数,以将可变道具传递给组件,同时保持状态的不可变性。

于 2017-04-06T16:59:42.330 回答