如何通过浸入式数组传递新密钥?

时间:2019-08-29 14:32:41

标签: redux react-redux immer.js

说我有一些初始状态,例如

const initialState = {
  loading: false,
  updating: false,
  saving: false,
  data: {},
  error: null
};

我想作为操作的结果添加到数据,但是我要添加的数据将是一个数组。我该怎么办?

我尝试过

export default produce((draft, action) => {
  switch (action.type) {
    case UPDATE_STATE.SUCCESS:
      draft.data.new_Array.push(action.payload);
      draft.loading = false;
      break;

    default:
  }
}, initialState);

但是这个错误。

如果我将初始状态设置为

const initialState = {
  loading: false,
  updating: false,
  saving: false,
  data: {
    newArray: []
  },
  error: null
};

在使阵列键覆盖初始状态并删除键之前对状态的任何更新。即

export default produce((draft, action) => {
  switch (action.type) {
    case OTHER_UPDATE_STATE.SUCCESS:
      draft.data = payload.action;
      draft.loading = false;
      break;

    default:
  }
}, initialState);

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

有一件事我发现您会遇到麻烦,draft.data.new_Array.push(action.payload);

确保不修改现有数据结构。原因是redux依赖于对象的内存引用,如果对象引用不更改,则可能使redux蒙混过去。

在您的情况下,我有什么感觉都不会触发的。

一种修改引用的方法是创建一个新对象,例如。

  return [...data, newElementObject]