extraReducers addCase报错:Cannot read properties of undefined (reading 'type')
时间: 2024-07-08 20:01:36 浏览: 199
在Redux.js中,`extraReducers` 和 `addCase` 函数通常用于扩展默认的 reducer 配置。如果遇到 "TypeError: Cannot read properties of undefined (reading 'type')" 错误,这通常是由于以下几个原因:
1. **未定义的 action type**:你在 `addCase` 中指定了一个无效或未定义的 action 类型。检查你在创建 action creator 时是否拼写错误,或者该类型是否应该在其他地方被定义。
```javascript
// 错误示例:
const handleMyAction = (state, action) => {
// 如果action.type未定义,会触发这个错误
};
const myReducer = (state = initialState, action) => {
return extraReducers({
[ACTION_TYPES.MY_ACTION]: handleMyAction, // ACTION_TYPES可能未被定义
});
};
```
2. **`extraReducers` 的语法错误**:确保你在调用 `extraReducers` 时传入的是一个正确的结构,应该是 object,并且键值对的形式是 `[actionType]: handlerFunction`。
```javascript
// 正确示例:
const myExtraReducers = {
[ACTION_TYPES.MY_ACTION]: handleMyAction,
};
const myReducer = (state = initialState, action) =>
commonReducers(state, action) || myExtraReducers[action.type] ??
state;
```
3. **混用了 classic 或者 createSlice**:如果你在 createSlice 中使用了 `extraReducers`,可能会因为createSlice内部处理不同而导致错误。确保你在正确的位置使用它们。
```javascript
// 使用createSlice时的情况:
const mySlice = createSlice({
name: 'mySlice',
initialState,
reducers: ...,
extraReducers: (builder) => { ... },
});
// 或者分开处理
const commonReducers = createCommonExtraReducers();
```
阅读全文