什么是在每次渲染(React,useReducer)的 reducer 中堆叠多个动作的更好方法?

What is a better approach to stack multiple actions in reducer per render (React, useReducer)?

从每次渲染的多个操作中使用减少逻辑的最佳方法是什么?这个例子展示了我当前解决方案的一个基本例子(创建一个结合逻辑的新动作),但一定有更好的方法。

基本示例:

我使用的是 React 的 useReducer,而不是 Redux

const [state, dispatch] = useReducer(reducer, {v1: 0, v2: 0});

使用堆叠前两个动作逻辑的新动作的基本减速器:

function reducer(state, action) {
  const { type, payload: {v1, v2} } = action;
  switch (type) {
    case SET_V1:
      return {...state, v1: setV1(v1)};
    case SET_V2:
      return {...state, v2: setV2(v2)};
    case SET_V1_AND_V2:
      return {...state, v1: setV1(v1), v2: setV2(v2)};
  }
}

减少委托给函数的逻辑以标准化逻辑:

const setV1 = (v1) => v1;
const setV2 = (v2) => v2;

感谢您的帮助

这可能会有所帮助:

Using Combine Reducer

const combineReducers = (slices) => (state, action) =>
  Object.keys(slices).reduce( // use for..in loop, if you prefer it
    (acc, prop) => ({
      ...acc,
      [prop]: slices[prop](acc[prop], action),
    }),
    state
  );