当前位置: 首页 > 知识库问答 >
问题:

Redux-调用动作中的函数链还是减速器?

秋阳荣
2023-03-14

我有一个逻辑问题,我是否应该对操作中的每个回调进行多个函数调用:

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减速机中,然后从那里调用下一个函数?

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
  }
}

第二种方法在我看来像是反模式,会产生意大利面条式的代码...也许我错了?

共有1个答案

许波涛
2023-03-14

假设减速器中的调度操作是反模式的,这是正确的。在这篇文章中,这些原因被简洁地提到了。

从Redux留档:

在减速器内不应该做的事情:

改变它的论点;

执行API调用和路由转换等副作用;

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

[...]现在,只要记住还原剂必须是纯的。给定相同的参数,它应该计算下一个状态并返回它。没有惊喜。没有副作用。没有API调用。没有突变。只是计算一下。

您可以查看Redux-Saga来处理异步流,以避免第一个示例中显示的回调地狱般的操作。

 类似资料:
  • Redux正在扔给我: 错误:预计减速机是一个功能。在线路上 从索引: 从配置: index.js 配置存储。js 减根剂 模拟减速器 找不到bug。我第一次用devtools插件支持创建redux商店

  • 我有一些逻辑,我已经把它放进减速机里了,我在想,应该把它放进行动中,然后传下去? 把这类东西放在动作或减速器中是最佳实践吗? 这里的工作示例。 减速器代码:

  • 是否可以在一个减速器中发送一个动作?我有一个progressbar和一个音频元素。目标是在音频元素中更新时间时更新progressbar。但我不知道将ontimeupdate eventhandler放置在何处,也不知道如何在ontimeupdate的回调中分派操作来更新ProgressBar。下面是我的代码:

  • 我有下面的状态和减缩器,但它没有推入新的数组对象。 照片未被推送,但被覆盖

  • 我有一个redux操作,它有一个对API的异步调用。 我试图通过使用sinon存根来模拟fetchActionCreator方法。这是我的规范文件 但不知何故,这个函数并没有受到嘲弄。你能告诉我正确的方法吗。

  • 我对Redux有相当的了解。 我想知道的一件事是,在一个大型应用程序中,会有多个操作和减缩器。 我的问题是 > reducer中是否存在重复操作? 即使当我查看redux流时,我也不理解这些问题 请澄清我的困惑。