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
相关产品推荐
相关产品推荐

