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

