Redux - 在action或reducer中调用一系列的函数?

12 浏览
0 Comments

Redux - 在action或reducer中调用一系列的函数?

我有一个逻辑问题,就是我是否应该在actions的每个回调响应中进行多个函数调用:

export const myAction= () => (distaptch, getState) => {
    callFunctionA(function(e){
        if(e){
            dispatch(eventA(e));
            callFunctionB(function(e){
                dispatch(eventB(e));
                callFunctionC(function(e){
                    dispatch(eventC(e));
                });
            });
        }
    });
}

或者我可能想要将这些调用移动到redux reducer中,并从那里调用每个下一个函数?

const reducer = (state={}, action) => {
  switch (action.type) {
    case 'EVENT_A':
      callFunctionB(action.e);
      return state;
    case 'EVENT_B':
        callFunctionC(action.e);
        return state;   
    default:
      return state
  }
}

第二种方法对我来说看起来像是导致代码混乱的反模式...也许我错了?

admin 更改状态以发布 2023年5月23日
0
0 Comments

你的想法是正确的,认为在reducer中调度actions是一种反模式。原因在这篇帖子中被简要提到。

根据Redux文档:

你应该从不在reducer中执行以下任何操作:

更改其参数;

执行像API调用和路由转换一样的副作用;

(调用非纯函数,例如Date.now()或Math.random()。

[...] 目前,只需记住reducer必须是纯净的。给定相同的参数,它应该计算出下一个状态并返回它。没有意外惊喜。没有副作用。没有API调用。没有变异。只是一个计算。

你可以了解Redux-Saga,用于处理异步流,以避免在第一个示例中显示的回调地狱。

0