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

使用redux-act时如何设置reducer名称?为何我的reducer未按函数名命名?

问题解答

你遇到的问题根源是redux-act的createReducer返回的不是直接可用的纯reducer函数,而是一个包含reduce方法的对象。

当你直接把这个对象传给combineReducers时,Redux的combineReducers期望每个键对应的是标准的纯函数reducer,但你传入的是一个对象,这就导致了异常的state结构——你看到的reduce其实是这个对象的属性,而非你期望的状态键名testState。

正确的用法修改

你需要提取createReducer返回对象中的reduce方法,作为实际的reducer传给combineReducers:

export const setTestState = createAction("Set test state");

// 创建reducer对象
const testStateReducer = createReducer(
  { 
    [setTestState]: (state, payload) => payload ? { ...payload, active: true } : null 
  }, 
  null 
);

// 传入reduce方法作为reducer
createStore(combineReducers({...others, testState: testStateReducer.reduce}))

或者更简洁的写法,直接在定义时就获取reduce方法:

export const setTestState = createAction("Set test state");

// 直接获取reduce方法作为reducer
const testState = createReducer(
  { 
    [setTestState]: (state, payload) => payload ? { ...payload, active: true } : null 
  }, 
  null 
).reduce;

// 正常传入combineReducers
createStore(combineReducers({...others, testState}))

这样调整后,你的store状态里就会出现testState键,对应你期望的状态值了。redux-act的这种设计是为了提供额外的扩展能力,但需要你明确提取reduce方法来适配标准Redux的reducer要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:39:12