【问题标题】:update dynamic object in redux using spread operator使用扩展运算符更新 redux 中的动态对象
【发布时间】:2020-07-20 14:53:53
【问题描述】:

我正在尝试使用扩展运算符更新 redux 中的对象,但我无法做到。 初始状态是一个空对象,因为 category 是从 api 调用动态接收的。
pagesdata 都是我要更新的对象使用扩展运算符(或任何最有效的方法)

 state = {
      [category]: {
        pages: {
          key: value(array)
        },
        data: {
          key: value(array)
        }
      }
    }

在我的减速器上,我尝试像这样更新它

 return {
        ...state,
        [category]: {
          ...state[category],
          pages: { ...state[category].pages, pages },
          data: { ...state[category].data, doctors },
          total: total,
        },
      };

但我得到“错误:TypeError:无法读取未定义的属性'pages'”

我做错了什么以及如何正确更新它们?

【问题讨论】:

  • 您似乎正在尝试在获取 API 数据之前更新 reducer,或者您没有更新,或者您的响应中不存在页面
  • 页面确实存在于响应中,因为如果我只设置 pages:pages,它将获取值,但它会覆盖它,我想用以前的结果更新它
  • 那么您第一次搜索的状态(state[category])中不存在类别!

标签: javascript reactjs redux


【解决方案1】:

因为第一次获取此类别时,state.category 未定义。你可以这样修复它:

return {
  ...state,
  [category]: state.category
    ? {
        ...state[category],
        pages: { ...state[category].pages, pages },
        data: { ...state[category].data, doctors },
        total: total,
      }
    : {
        pages,
        data: doctors,
        total,
      },
};

【讨论】:

  • 非常感谢。有效。只需要改变 [category]: state[category] ​​? { ...
  • 我很高兴有帮助。
猜你喜欢
  • 2018-09-04
  • 2017-06-12
  • 2017-06-13
  • 2021-12-28
  • 2017-06-12
  • 2017-11-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多