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

Redux Toolkit能否仅用extraReducers和空reducers对象创建slice?

Redux Toolkit 空reducers创建slice问题解答

Redux Toolkit 完全支持仅使用 extraReducers 配合空 reducers 对象、甚至省略 reducers 字段创建slice,不需要额外添加冗余的空reducer方法。你遇到的slice未出现在Redux state中的问题,和空reducers配置没有关联,通常是以下配置错误导致:

  • 未在根store的reducer配置中正确注册当前slice的reducer
    很多场景下开发者是在添加空reducer的同时,才补上了slice的注册步骤,因此误以为是空reducers导致状态未挂载。注册示例如下:
import { configureStore } from '@reduxjs/toolkit'
import { walkSlice } from './walkSlice'

export const store = configureStore({
  reducer: {
    // 必须在此处注册slice的reducer,才会在state中生成对应walk命名空间的状态
    walk: walkSlice.reducer
  }
})
  • 初始状态initialState未明确定义
    如果initialState赋值为undefined,可能会出现状态未挂载的错觉,需要确保初始值是明确的对象:
const initialState = {
  status: cStatusType.Idle,
  // 其他业务所需初始字段
}

正确无冗余的写法示例

你可以直接省略reducers字段,不需要写reducers: {},示例如下:

export const walkSlice = createSlice({
  name: "walk",
  initialState,
  extraReducers: (builder) => {
    builder
      // Change status to loading when API call is pending
      .addCase(fetchWalk.pending, (state) => {
        state.status = cStatusType.Loading;
      })
      // 其他业务逻辑的addCase
  }
})

只要walkSlice.reducer是正常的reducer函数,注册到store后一定会在state.walk位置生成对应的状态,和是否定义了reducers内的方法无任何关联。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 01:15:05