在Redux的createSlice中如何调用其他reducer方法修改状态?
问题解答
完全可以实现,你定义的setRecordsReducer和setObjectsReducer本身就是接收state和action返回新state的纯函数,不存在副作用,完全可以组合复用。
具体实现方案
你只需要在setBoth对应的reducer中按顺序调用两个现有reducer,将前一个reducer返回的新state作为后一个reducer的入参即可:
// 定义setBoth对应的reducer const setBothReducer = (state, {payload}) => { // 先调用setRecordsReducer更新items.records部分 const intermediateState = setRecordsReducer(state, { payload: { id: payload.id, recordName: payload.recordName } }) // 再调用setObjectsReducer基于中间状态更新objects.records部分,返回最终状态 return setObjectsReducer(intermediateState, { payload: { id: payload.id, objectName: payload.objectName } }) } // 把reducer注册到createSlice中 export default createSlice({ name:'testSlice', initialState, reducers:{ setRecords: setRecordsReducer, setObjects: setObjectsReducer, setBoth: setBothReducer } });
使用方式
触发setBoth action时,传入同时包含两个reducer所需参数的payload即可:
dispatch(setBoth({ id: 'xxx', recordName: '测试记录', objectName: '测试对象' }))
注意事项
- 你示例中给出的两个reducer代码末尾缺少闭合的花括号和圆括号,实际编写时注意补全语法即可
- 由于两个reducer修改的是state的完全不同分支,调用顺序不会影响最终结果,也不会出现状态覆盖的问题
内容的提问来源于stack exchange,提问作者spspli
相关产品推荐
相关产品推荐

