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

如何在Redux Toolkit的createSlice中自定义action type拼接格式

createSlice 自定义action type格式解决方案

核心原因

Redux Toolkit 内置的createSlice默认硬编码了${sliceName}/${reducerName}的action type拼接规则,斜杠是内部自动生成的,仅修改slice的name属性无法去掉多余斜杠。

可行实现方案

方案1:自定义包装createSlice(全量适配场景)

适合所有slice内的action都需要统一自定义格式的场景,和原生createSlice用法完全兼容,不需要修改原有业务代码:

  • 实现自定义包装函数
import { createSlice as originalCreateSlice } from '@reduxjs/toolkit'

const customCreateSlice = (options) => {
  const { name, reducers, ...rest } = options
  const slice = originalCreateSlice({ name, reducers, ...rest })

  // 替换所有action的type为目标格式
  Object.keys(slice.actions).forEach(reducerKey => {
    slice.actions[reducerKey].type = `[${name}] ${reducerKey}`
  })

  // 重写reducer匹配逻辑,适配新的action type
  const customReducerMap = Object.fromEntries(
    Object.entries(slice.caseReducers).map(([reducerKey, handler]) => [
      `[${name}] ${reducerKey}`,
      handler
    ])
  )

  const wrappedReducer = (state, action) => {
    if (customReducerMap[action.type]) {
      return customReducerMap[action.type](state, action)
    }
    return slice.reducer(state, action)
  }
  slice.reducer = wrappedReducer

  return slice
}
  • 使用示例
const userSlice = customCreateSlice({
  name: 'user',
  initialState: { info: null },
  reducers: {
    setUserInfo: (state, action) => {
      state.info = action.payload
    }
  }
})

// 输出结果为 [user] setUserInfo,符合需求
console.log(userSlice.actions.setUserInfo.type)

方案2:手动创建action + extraReducers(少量自定义场景)

仅个别action需要自定义格式时可以用该方案,不需要修改createSlice逻辑:

import { createSlice, createAction } from '@reduxjs/toolkit'

// 手动定义符合格式要求的action
const setUserInfo = createAction('[user] setUserInfo')

const userSlice = createSlice({
  name: 'user',
  initialState: { info: null },
  extraReducers: builder => {
    builder.addCase(setUserInfo, (state, action) => {
      state.info = action.payload
    })
  }
})

export { setUserInfo }
export default userSlice.reducer

内容的提问来源于stack exchange,提问作者Никита Толстиков

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:06:02