React/Redux reducer 在初始化期间返回 undefined

新手上路,请多包涵

我正在做我的第一个 React/Redux 项目。一切顺利,然后我尝试创建一个新的减速器。我认为这是一个非常简单的方法,但是当我加载页面时出现错误“Reducer X 在初始化期间返回未定义”。跟踪表明这是在 combineReducers() 中发生的。我发现了几个类似的问题,但没有解决问题。

关于这个问题: 尽管为 createStore() 提供了 initialState,但为什么我会得到“Reducer […] 在初始化期间返回未定义”?

问题是他们在 createStore() 中使用了 initialState,而我没有这样做。

关于这个问题: 为什么我的 Redux reducer 认为我的状态是未定义的?

问题是我拥有的减速器中缺少默认返回值。

我的减速器代码如下。我在开头有一个 console.log() 并且根本没有被调用。

reducers/reducer_which_sorter.js

 import { SORT_CAMPERS } from '../actions/index';

export default function(state = null, action) {
    console.log("action is", action);
    switch(action.which) {
        case 'recent':
        case 'alltime':
            return action.which;
            break;
        default:
            return state;
    }

    return state;
}

reducers/index.js

 import { combineReducers } from 'redux';
import Campers from './reducer_camper_list';
import ActiveSorter from './reducer_which_sorter';

const rootReducer = combineReducers({
  campers: Campers,
  activeSorter: ActiveSorter
});

export default rootReducer;

一切都很好。 webpack 没有错误。我已经对我的文件路径进行了两次、三次和四次检查。我没有看到任何错别字。谁能看到我在这里缺少的东西?

原文由 RaneWrites 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

Redux 要求是对操作使用 type 属性,而不是 which ,正如您在示例中所做的那样。由于未调用您的 console.log 检查,因此问题可能出在您的其他减速器中(未在您的问题中显示。)

这很重要的原因是 combineReducers 正在调用具有特殊 INIT 操作类型的 reducer 函数:

 const initialState = reducer(undefined, { type: ActionTypes.INIT })

资料来源: https ://github.com/reactjs/redux/blob/master/src/combineReducers.js

你的函数,因为它打开了 ‘action.which’ 而不是 ‘action.type’,所以除了 undefined 之外没有返回任何东西。

原文由 Radio- 发布,翻译遵循 CC BY-SA 3.0 许可协议

我在开头有一个 console.log() 并且根本没有被调用。

这很奇怪,因为 reducer 函数必须至少用 @@INIT 操作调用一次。

尝试测试您的 rootReducer 是否被调用。将其更改为:

 const rootReducer = (state = {}, action) => {
  console.log('Test if rootReducer is ever called')

  return {
    campers: Campers(state.campers, action),
    activeSorter: ActiveSorter(state.activeSorter, action)
  }
}

如果它没有被调用,那么问题就出在更高的地方,而不是减速器本身。

原文由 AlexM 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题