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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 06:01:00