我正在做我的第一个 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 许可协议
Redux 要求是对操作使用
type
属性,而不是which
,正如您在示例中所做的那样。由于未调用您的 console.log 检查,因此问题可能出在您的其他减速器中(未在您的问题中显示。)这很重要的原因是
combineReducers
正在调用具有特殊 INIT 操作类型的 reducer 函数:资料来源: https ://github.com/reactjs/redux/blob/master/src/combineReducers.js
你的函数,因为它打开了 ‘action.which’ 而不是 ‘action.type’,所以除了 undefined 之外没有返回任何东西。