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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 11:06:03