You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Toolkit Redux extraReducers未触发问题求助

问题分析与解决

你遇到的extraReducer未触发的核心原因是你的Slice Reducer没有注册到Redux Store中,同时代码里还有一些细节可以优化:

1. 核心问题:Reducer未注册到Store

你的Store配置只导入并合并了navigationReducer,但你创建的counter slice对应的reducer完全没被加入到Store的reducer列表里。Redux只会处理已注册的reducer,所以extraReducers里的逻辑根本不会被执行。

修复后的Store代码:

import navigationReducer from "./navigationSlice";
import counterReducer from "./counterSlice"; // 导入你的counter slice reducer
const { combineReducers, configureStore } = require("@reduxjs/toolkit")

export default configureStore({
  reducer: combineReducers({
    selectedElement: navigationReducer,
    counter: counterReducer // 将你的reducer加入到这里
  }),
});

2. 其他优化点

(1)AsyncThunk命名简化

createAsyncThunk的第一个参数不需要手动添加/ful后缀,Redux Toolkit会自动为这个thunk生成pending/fulfilled/rejected三种状态的action类型,手动加后缀完全多余。

(2)Fetch代码简化

你当前的fetch写法混合了await和嵌套then,既不简洁也容易出错,建议统一使用async/await语法:

export const fetchItens = createAsyncThunk('table/fetchItens', async (payload, thunkAPI) => {
  let url = '';
  if (payload.serie === 0) {
    url = 'http://localhost:3006/campeonatos/brasileiraoA';
  } else if (payload.serie === 1) {
    url = 'http://localhost:3006/campeonatos/brasileiraoB';
  }
  
  if (!url) return null;
  
  try {
    const response = await fetch(url);
    const data = await response.json();
    if (data.error) {
      console.log("Ocorreu um erro.");
      return null;
    }
    return data.dados;
  } catch (err) {
    console.error('Ocorreu um erro.', err);
    return thunkAPI.rejectWithValue(err); // 用这个抛出错误,方便在rejected状态处理
  }
})

(3)状态选择器修正

你的getDates选择器写法错误,因为你的reducer在Store里的键是counter,所以应该从state.counter里取dates:

export const getDates = (state) => state.counter.dates;

(4)Slice内状态更新简化

Redux Toolkit的createSlice允许直接修改状态(内部有Immer做处理),不需要返回新对象:

reducers: {
  setDate: (state, { payload }) => {
    state.dates = payload.dates; // 直接赋值即可
  }
}

(5)extraReducer容错处理

在fulfilled里加个判断,避免payload为null时map报错:

builder.addCase(fetchItens.fulfilled, (state, { payload }) => {
  if (payload) {
    state.dates.push(...payload); // 用扩展运算符比map+push更高效
  }
})

内容的提问来源于stack exchange,提问作者Biel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 20:55:11