为啥我的 Redux reducer 认为我的状态是未定义的?

Posted

技术标签:

【中文标题】为啥我的 Redux reducer 认为我的状态是未定义的?【英文标题】:Why does my Redux reducer think my state is undefined?为什么我的 Redux reducer 认为我的状态是未定义的? 【发布时间】:2016-10-27 05:17:57 【问题描述】:

我相信我正在逐行复制 Todo 教程,我收到此错误:

错误:Reducer“addReport”在初始化期间返回未定义。 如果传递给减速器的状态未定义,则必须显式 返回初始状态。初始状态可能不是未定义的。

这是我的 addReport 减速器:

const addReport = (state = [], action) =>

  console.log(state)
  switch (action.type) 
    case ADD_NEW_REPORT:
    return [...state,
      addReports(undefined, action)
    ]
    

我添加了日志语句,并且可以验证它是否返回一个空数组。即使将 state 设置为 1 也会产生相同的结果。我错过了什么?

【问题讨论】:

【参考方案1】:

您缺少开关盒的default

default: 
  return 
    ...state
  

如果您忘记这样做,Redux 将不会像一个好孩子一样玩耍!

或者,您可以在最后显式返回初始状态: If the state passed to the reducer is undefined, you must explicitly return the initial state.

【讨论】:

有趣的是,这个答案对我有所帮助,因为我正在设置一个对象,但在我的默认值中只返回“状态”。我不知道您需要以与初始状态相同的格式发送默认状态。如果初始状态是数组或字符串等,情况似乎并非如此。 对我来说,这以及语法错误(不完整的赋值行)导致减速器无法正确加载状态。谢谢!

以上是关于为啥我的 Redux reducer 认为我的状态是未定义的?的主要内容,如果未能解决你的问题,请参考以下文章

Redux (with React) Reducer switch 语句不更新状态

React Redux reducer 未更新状态

使用 Redux 工具包的常见加载状态 reducer

为啥reducer函数只返回代理?还原/工具包

将项目添加到 redux-toolkit 中的嵌套数组

Redux reducers——改变深度嵌套状态