什么是在每次渲染(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;
感谢您的帮助
这可能会有所帮助:
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
);
从每次渲染的多个操作中使用减少逻辑的最佳方法是什么?这个例子展示了我当前解决方案的一个基本例子(创建一个结合逻辑的新动作),但一定有更好的方法。
基本示例:
我使用的是 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;
感谢您的帮助
这可能会有所帮助:
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
);