Redux Toolkit中不使用createSlice如何配置手写Reducer与initialState
答案
完全可以在Redux Toolkit(RTK)中直接使用和原生Redux写法完全一致的手写Reducer,不需要强制使用createSlice,其余Store配置仍可完全遵循RTK规范。
具体实现指引
- 手写的原生Reducer不需要做任何改造,可直接传入
configureStore,RTK对原生Reducer做了完全兼容。 initialState不需要在configureStore层面单独传入,直接按原生Redux的写法,将初始值设为Reducer函数的state参数默认值即可。- 如果你之前已经用原生
combineReducers组装好了完整根Reducer,也可以直接整体传入configureStore,无需拆分调整。
代码示例
1. 原生风格手写Reducer(和纯Redux写法完全一致)
// 定义初始状态 const initialState = { count: 0, todoList: [] } // 纯手写Reducer,无任何RTK相关API function todoReducer(state = initialState, action) { switch (action.type) { case 'todo/add': return { ...state, todoList: [...state.todoList, action.payload] } case 'todo/incrementCount': return { ...state, count: state.count + 1 } default: return state } }
2. configureStore配置
import { configureStore } from '@reduxjs/toolkit' export const store = configureStore({ reducer: { // 直接传入手写的原生Reducer即可,和传入createSlice生成的reducer无区别 todo: todoReducer } // 中间件、DevTools等其余配置完全按RTK规范正常编写即可,无需额外适配 })
补充说明:RTK默认开启的Immer能力不会和原生Reducer的不可变更新写法冲突,Immer会自动识别你返回的全新state对象,不会做额外处理。如果后续需要逐步迁移到RTK写法,你也可以直接在这个手写Reducer里修改state属性,Immer会自动生成正确的不可变更新结果。
内容的提问来源于stack exchange,提问作者Faaiz ALAM
相关产品推荐
相关产品推荐

