首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我们需要在redux thunk或saga中调用api,为什么不在组件中调用?

在Redux中,我们需要使用中间件来处理异步操作,例如网络请求。在React应用中,常见的两个中间件是redux-thunk和redux-saga。

  1. 为什么需要在redux thunk或saga中调用API? 在组件中调用API可能会导致以下问题:
    • 违反了单一职责原则:组件应该专注于界面展示和用户交互,而不是处理数据逻辑。将数据逻辑与组件分离可以提高代码的可维护性和可测试性。
    • 避免重复代码:多个组件可能需要调用相同的API,如果在每个组件中都调用API,会导致代码冗余和难以维护。使用Redux中间件可以将API调用逻辑集中管理。
    • 支持可预测的状态管理:使用Redux可以将应用的状态集中管理,而不是分散在各个组件中。通过在Redux中间件中调用API,可以更好地控制数据流,保持应用状态的一致性。
  • Redux Thunk和Redux Saga的区别:
    • Redux Thunk:是一个简单的Redux中间件,允许我们在action creator中返回一个函数而不仅仅是一个普通的action对象。这个函数可以异步地调用API,并在收到响应后分发新的action。
    • Redux Saga:是一个更强大的Redux中间件,使用了ES6的Generator函数来管理异步流程。它提供了一种基于声明式的方式来处理复杂的异步操作,例如处理多个并发请求、取消请求等。
  • 为什么不在组件中调用API?
    • 分离关注点:组件应该专注于界面展示和用户交互,而不是处理数据逻辑。将数据逻辑与组件分离可以提高代码的可维护性和可测试性。
    • 代码复用:多个组件可能需要调用相同的API,如果在每个组件中都调用API,会导致代码冗余和难以维护。将API调用逻辑封装在Redux中间件中,可以方便地在多个组件间复用。
    • 更好的状态管理:通过在Redux中间件中调用API,可以更好地控制数据流,保持应用状态的一致性。在组件中直接调用API可能会导致状态管理的混乱和不一致。

总结:在Redux中使用Redux Thunk或Redux Saga等中间件来处理异步操作和API调用,可以实现数据逻辑的分离、代码复用和更好的状态管理,同时也遵循了React应用中的最佳实践原则。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

深入理解 redux 数据流和异步过程管理

组件从 store 取数据,当交互的时候去通知 store 改变对应的数据。...正是因为这个原因,我们几乎见不到用 context 作为 store,基本都是搭配一个 redux。 所以为什么 redux 好呢?第一个原因就是数据流清晰,改变数据有统一的入口。...这就像为什么我们在公司里想要什么权限都要走审批流,而不是直接找某人,一样的道理。集中管理流程比较清晰,而且还可以追溯。...没有,这段逻辑依然是在组件里写,只不过移到了 dispatch 里,也没有提供多个异步过程的管理机制。 解决这个问题,需要用 redux-saga redux-observable 中间件。...然后 task 会调用不同的实现函数来执行该 worker saga为什么要这样设计呢?直接执行不就行了,为啥要拆成 worker saga 和 task 两部分,这样理解成本不就高了么?

2.5K10

字节前端必会react面试题1

redux异步流中间件其实有很多,当下主流的异步中间件有两种redux-thunkredux-saga。...(1)使用react-thunk中间件redux-thunk优点:体积⼩: redux-thunk的实现⽅式很简单,只有不到20⾏代码使⽤简单: redux-thunk没有引⼊像redux-saga或者...中间件redux-saga优点:异步解耦: 异步操作被被转移到单独 saga.js ,不再是掺杂在 action.js component.js action摆脱thunk function:...: redux-saga不仅在使⽤难以理解的 generator function,⽽且有数⼗个API,学习成本远超redux-thunk,最重要的是你的额外学习成本是只服务于这个库的,与redux-observable...我们将它们称为纯组件,因为它们可以接受任何动态提供的子组件,但它们不会修改复制其输入组件的任何行为。

3.2K20
  • 前端高频react面试题

    React Hooks 的限制主要有两条:不要在循环、条件嵌套函数调用 Hook;在 React 的函数组件调用 Hook。那为什么会有这样的限制呢?...那为什么要在循环、条件嵌套函数调用 Hook 呢?因为 Hooks 的设计是基于数组实现。在调用时按顺序加入数组,如果使用循环、条件嵌套函数很有可能导致数组取值错位,执行错误的 Hook。...(1)使用react-thunk中间件redux-thunk优点:体积⼩: redux-thunk的实现⽅式很简单,只有不到20⾏代码使⽤简单: redux-thunk没有引⼊像redux-saga或者...中间件redux-saga优点:异步解耦: 异步操作被被转移到单独 saga.js ,不再是掺杂在 action.js component.js action摆脱thunk function:...: redux-saga不仅在使⽤难以理解的 generator function,⽽且有数⼗个API,学习成本远超redux-thunk,最重要的是你的额外学习成本是只服务于这个库的,与redux-observable

    3.4K20

    高级前端react面试题总结

    (1)不要在循环,条件嵌套函数调用Hook,必须始终在 React函数的顶层使用Hook这是因为React需要利用调用顺序来正确更新相应的状态,以及调用相应的钩子函数。...Redux 请求中间件如何处理并发使用redux-Saga redux-saga是一个管理redux应用异步操作的中间件,用于代替 redux-thunk 的。...(1)使用react-thunk中间件redux-thunk优点:体积⼩: redux-thunk的实现⽅式很简单,只有不到20⾏代码使⽤简单: redux-thunk没有引⼊像redux-saga或者...中间件redux-saga优点:异步解耦: 异步操作被被转移到单独 saga.js ,不再是掺杂在 action.js component.js action摆脱thunk function:...: redux-saga不仅在使⽤难以理解的 generator function,⽽且有数⼗个API,学习成本远超redux-thunk,最重要的是你的额外学习成本是只服务于这个库的,与redux-observable

    4.1K40

    社招前端一面react面试题汇总

    (在构造函数)调用 super(props) 的目的是什么在 super() 被调用之前,子类是不能使用 this 的,在 ES2015 ,子类必须在 constructor 调用 super()...redux-thunk优点:体积⼩:redux-thunk的实现⽅式很简单,只有不到20⾏代码;使⽤简单:redux-thunk没有引⼊像redux-saga或者redux-observable额外的范式...redux-saga优点:异步解耦:异步操作被被转移到单独saga.js,不再是掺杂在action.jscomponent.js;action摆脱thunk function: dispatch的参数依然是.../catch语法直接捕获处理;功能强⼤:redux-saga提供了⼤量的Saga辅助函数和Effect创建器供开发者使⽤,开发者⽆须封装或者简单封装即可使⽤;灵活:redux-saga可以将多个Saga...redux-saga缺陷:额外的学习成本:redux-saga不仅在使⽤难以理解的generator function,⽽且有数⼗个API,学习成本远超reduxthunk,最重要的是你的额外学习成本是只服务于这个库的

    3K20

    百度前端高频react面试题(持续更新)_2023-02-27

    我们知道反向继承的渲染劫持可以控制 WrappedComponent 的渲染过程,也就是说这个过程我们可以对 elements tree、 state、 props render() 的结果做各种操作...redux异步流中间件其实有很多,当下主流的异步中间件有两种redux-thunkredux-saga。...(1)使用react-thunk中间件 redux-thunk优点: 体积⼩: redux-thunk的实现⽅式很简单,只有不到20⾏代码 使⽤简单: redux-thunk没有引⼊像redux-saga...中间件 redux-saga优点: 异步解耦: 异步操作被被转移到单独 saga.js ,不再是掺杂在 action.js component.js action摆脱thunk function...缺陷: 额外的学习成本: redux-saga不仅在使⽤难以理解的 generator function,⽽且有数⼗个API,学习成本远超redux-thunk,最重要的是你的额外学习成本是只服务于这个库的

    2.3K30

    2022社招React面试题 附答案

    通俗来讲,就是我们 render 一个组件,但这个组件的 DOM 结构并不在组件内。...(1)使用react-thunk中间件 redux-thunk优点: 体积⼩: redux-thunk的实现⽅式很简单,只有不到20⾏代码 使⽤简单: redux-thunk没有引⼊像redux-saga...中间件 redux-saga优点: 异步解耦: 异步操作被被转移到单独 saga.js ,不再是掺杂在 action.js component.js action摆脱thunk function...缺陷: 额外的学习成本: redux-saga不仅在使⽤难以理解的 generator function,⽽且有数⼗个API,学习成本远超redux-thunk,最重要的是你的额外学习成本是只服务于这个库的...⽤到,但是我们依然需要引⼊这些代码 ts⽀持不友好: yield⽆法返回TS类型 redux-saga可以捕获action,然后执行一个函数,那么可以把异步代码放在这个函数,使用步骤如下: 配置中间件

    2K50

    2021高频前端面试题汇总之React篇

    通俗来讲,就是我们 render 一个组件,但这个组件的 DOM 结构并不在组件内。...(1)使用react-thunk中间件 redux-thunk优点: 体积⼩: redux-thunk的实现⽅式很简单,只有不到20⾏代码 使⽤简单: redux-thunk没有引⼊像redux-saga...中间件 redux-saga优点: 异步解耦: 异步操作被被转移到单独 saga.js ,不再是掺杂在 action.js component.js action摆脱thunk function...缺陷: 额外的学习成本: redux-saga不仅在使⽤难以理解的 generator function,⽽且有数⼗个API,学习成本远超redux-thunk,最重要的是你的额外学习成本是只服务于这个库的...⽤到,但是我们依然需要引⼊这些代码 ts⽀持不友好: yield⽆法返回TS类型 redux-saga可以捕获action,然后执行一个函数,那么可以把异步代码放在这个函数,使用步骤如下: 配置中间件

    2K00

    React saga_react获取子组件ref

    redux-saga的优势 传统意义讲,我们很多业务逻辑要在action处理,所以会导致action的处理比较混乱,难以维护,而且代码量比较大,如果我们应用redux-saga会很大程度上简化代码,...(3)redux-thunk的缺点 hunk的缺点也是很明显的,thunk仅仅做了执行这个函数,并不在乎函数主体内是什么,也就是说thunk使 得redux可以接受函数作为action,但是函数的内部可以多种多样...和调用redux的其他中间件一样,如果想使用redux-saga中间件,那么只要在applyMiddleware调用一个createSagaMiddleware的实例。...(plain object) 对比redux-thunk我们发现,redux-saga监听到了原始js对象action,并不会马上执行副作用操作,会先通过Effect方法将其转化成一个描述对象,然后再将描述对象...products = yield call(Api.fetch, '/products') // ... } 上述代码,比如我们需要测试Api.fetch返回的结果是否符合预期,通过调用call

    4.5K30

    2021高频前端面试题汇总之React篇

    redux异步流中间件其实有很多,当下主流的异步中间件有两种redux-thunkredux-saga。...(1)使用react-thunk中间件 redux-thunk优点: 体积⼩: redux-thunk的实现⽅式很简单,只有不到20⾏代码 使⽤简单: redux-thunk没有引⼊像redux-saga...中间件 redux-saga优点: 异步解耦: 异步操作被被转移到单独 saga.js ,不再是掺杂在 action.js component.js action摆脱thunk function...缺陷: 额外的学习成本: redux-saga不仅在使⽤难以理解的 generator function,⽽且有数⼗个API,学习成本远超redux-thunk,最重要的是你的额外学习成本是只服务于这个库的...⽤到,但是我们依然需要引⼊这些代码 ts⽀持不友好: yield⽆法返回TS类型 redux-saga可以捕获action,然后执行一个函数,那么可以把异步代码放在这个函数,使用步骤如下: 配置中间件

    2K00

    百度前端必会react面试题汇总

    (1)不要在循环,条件嵌套函数调用Hook,必须始终在 React函数的顶层使用Hook这是因为React需要利用调用顺序来正确更新相应的状态,以及调用相应的钩子函数。...此外,React 还需要借助 Key 值来判断元素与本地状态的关联关系,因此我们绝不可忽视转换函数 Key 的重要性React key 是干嘛用的 为什么要加?...具体来讲:Reactrender函数是支持闭包特性的,所以我们import的组件在render可以直接调用。...redux-thunk优点:体积⼩:redux-thunk的实现⽅式很简单,只有不到20⾏代码;使⽤简单:redux-thunk没有引⼊像redux-saga或者redux-observable额外的范式...redux-saga优点:异步解耦:异步操作被被转移到单独saga.js,不再是掺杂在action.jscomponent.js;action摆脱thunk function: dispatch的参数依然是

    1.6K10

    前端react面试题(必备)2

    但是在⼀定规模的项⽬,上述⽅法很难进⾏异步流的管理,通常情况下我们会借助redux的异步中间件进⾏异步处理。...redux异步流中间件其实有很多,当下主流的异步中间件有两种redux-thunkredux-saga。...(1)使用react-thunk中间件redux-thunk优点:体积⼩: redux-thunk的实现⽅式很简单,只有不到20⾏代码使⽤简单: redux-thunk没有引⼊像redux-saga或者...中间件redux-saga优点:异步解耦: 异步操作被被转移到单独 saga.js ,不再是掺杂在 action.js component.js action摆脱thunk function:...: redux-saga不仅在使⽤难以理解的 generator function,⽽且有数⼗个API,学习成本远超redux-thunk,最重要的是你的额外学习成本是只服务于这个库的,与redux-observable

    2.3K20

    Redux原理分析以及使用详解(TS && JS)

    某个组件的状态,需要共享 某个状态需要在任何地方都可以拿到 一个组件需要改变全局状态 一个组件需要改变另一个组件的状态 1.2、为什么要用Redux 在React,数据在组件是单向流动的,这是react...例如修改外部的变量、调用DOM API修改页面,发送Ajax请求、调用window.reload刷新浏览器甚至是console.log打印数据,都是副作用。...从简单的 react-thunkredux-promise 再到 redux-saga等等,都代表这各自解决redux异步流管理问题的方案 4.1 、redux-thunk redux-thunk...redux-saga将react的同步操作与异步操作区分开来,以便于后期的管理与维护 ,redux- saga相当于在Redux原有数据流多了一层,通过对Action进行监听,从而捕获到监听的Action...首先我们组件当中使用redux,就需要使用react- redux的connect将该组件与store连接起来,而connect又可以接受两个参数,分别是mapStateToProps和mapDispatchToProps

    4.3K30

    美团前端react面试题汇总

    (1)使用react-thunk中间件redux-thunk优点:体积⼩: redux-thunk的实现⽅式很简单,只有不到20⾏代码使⽤简单: redux-thunk没有引⼊像redux-saga或者...中间件redux-saga优点:异步解耦: 异步操作被被转移到单独 saga.js ,不再是掺杂在 action.js component.js action摆脱thunk function:...: redux-saga不仅在使⽤难以理解的 generator function,⽽且有数⼗个API,学习成本远超redux-thunk,最重要的是你的额外学习成本是只服务于这个库的,与redux-observable...React 的实现:通过给函数传入一个组件(函数类)后在函数内部对该组件(函数类)进行功能的增强(不修改传入参数的前提下),最后返回这个组件(函数类),即允许向一个现有的组件添加新的功能,同时又不去修改该组件...,提高编码效率redux的缺点: 当数据更新是有时候组件不需要,也要重新绘制,影响效率refs 是什么refs是react引用的简写,有主语存储特定 React 元素组件的引用的属性,它将由组件渲染配置函数返回当我们需要输入框的内容

    5.1K30

    一天梳理完react面试题

    constructor通常只做两件事:初始化组件的 state给事件处理方法绑定 thisconstructor(props) { super(props); // 不要在构造函数调用 setState...redux异步流中间件其实有很多,当下主流的异步中间件有两种redux-thunkredux-saga。...(1)使用react-thunk中间件redux-thunk优点:体积⼩: redux-thunk的实现⽅式很简单,只有不到20⾏代码使⽤简单: redux-thunk没有引⼊像redux-saga或者...中间件redux-saga优点:异步解耦: 异步操作被被转移到单独 saga.js ,不再是掺杂在 action.js component.js action摆脱thunk function:...: redux-saga不仅在使⽤难以理解的 generator function,⽽且有数⼗个API,学习成本远超redux-thunk,最重要的是你的额外学习成本是只服务于这个库的,与redux-observable

    5.5K30

    前端二面高频react面试题集锦_2023-02-23

    redux异步流中间件其实有很多,当下主流的异步中间件有两种redux-thunkredux-saga。...(1)使用react-thunk中间件 redux-thunk优点: 体积⼩: redux-thunk的实现⽅式很简单,只有不到20⾏代码 使⽤简单: redux-thunk没有引⼊像redux-saga...中间件 redux-saga优点: 异步解耦: 异步操作被被转移到单独 saga.js ,不再是掺杂在 action.js component.js action摆脱thunk function...缺陷: 额外的学习成本: redux-saga不仅在使⽤难以理解的 generator function,⽽且有数⼗个API,学习成本远超redux-thunk,最重要的是你的额外学习成本是只服务于这个库的...⽤到,但是我们依然需要引⼊这些代码 ts⽀持不友好: yield⽆法返回TS类型 redux-saga可以捕获action,然后执行一个函数,那么可以把异步代码放在这个函数,使用步骤如下: 配置中间件

    2.8K20

    一文梭穿Vuex、Flux、ReduxRedux-saga、Dva、MobX

    Store 每一个 Vuex 里面有一个全局的 Store,包含着应用的状态 State,这个 State 只是需要在组件中共享的数据,不用放所有的 State,没必要。...把UI组件的事件映射到 dispatch 方法 Redux-saga 刚才介绍了两个Redux 处理异步的中间件 redux-thunkredux-promise,当然 redux 的异步中间件还有很多...对比 Redux-thunk 比较一下 redux-thunkredux-saga 的代码: 和 redux-thunk 等其他异步中间件对比来说,redux-saga 主要有下面几个特点:...异步数据获取的相关业务逻辑放在了单独的 saga.js ,不再是掺杂在 action.js component.js 。...之前我们聊了 redux、react-reduxredux-saga 之类的概念,大家肯定觉得头昏脑涨的,什么 action、reducer、saga 之类的,写一个功能要在这些js文件里面不停的切换

    5.5K10

    单向数据流-从共享状态管理:fluxreduxvuex漫谈异步数据处理

    比如 redux-thunk redux-promise,分别是使用异步回调和 Promise 来解决异步 action 问题的。...redux-saga的优势 Redux 处理异步的中间件 redux-thunkredux-promise,当然 redux 的异步中间件还有很多,他们可以处理大部分场景,这些中间件的思想基本上都是把异步请求部分放在了...的事件方法,Store 的事件方法对 State 进行修改返回一个新的 State,State 改变之后,View 发生响应式改变。...Vuex数据流的顺序是: View调用store.commit提交对应的请求到Store对应的mutation函数->store改变(vue检测到数据变化自动渲染) redux 推荐使用 Object.assign...而React-Redux则除了需要在较外层组件结构中使用以拿到store之外,还需要显式指定容器组件,即用connect包装一下该组件

    3.7K40

    高频React面试题及详解

    为什么选择使用框架而不是原生? 框架的好处: 组件化: 其中以 React 的组件化最为彻底,甚至可以到函数级别的原子组件,高度的组件化可以是我们的工程易于维护、易于组合拓展。...由于JavaScript异步事件的性质,当您启动API调用时,浏览器会在此期间返回执行其他工作。...redux-thunk优点: 体积小: redux-thunk的实现方式很简单,只有不到20行代码 使用简单: redux-thunk没有引入像redux-saga或者redux-observable额外的范式...功能孱弱: 有一些实际开发中常用的功能需要自己进行封装 redux-saga优点: 异步解耦: 异步操作被被转移到单独 saga.js ,不再是掺杂在 action.js component.js...分支覆盖等等 redux-saga缺陷: 额外的学习成本: redux-saga不仅在使用难以理解的 generator function,而且有数十个API,学习成本远超redux-thunk,最重要的是你的额外学习成本是只服务于这个库的

    2.4K40

    一天梳理完react面试高频题

    这种机制可以让我们改变数据流,实现如异步action ,action 过滤,日志输出,异常报告等功能redux-logger:提供日志输出redux-thunk:处理异步操作redux-promise:...redux异步流中间件其实有很多,当下主流的异步中间件有两种redux-thunkredux-saga。...(1)使用react-thunk中间件redux-thunk优点:体积⼩: redux-thunk的实现⽅式很简单,只有不到20⾏代码使⽤简单: redux-thunk没有引⼊像redux-saga或者...中间件redux-saga优点:异步解耦: 异步操作被被转移到单独 saga.js ,不再是掺杂在 action.js component.js action摆脱thunk function:...: redux-saga不仅在使⽤难以理解的 generator function,⽽且有数⼗个API,学习成本远超redux-thunk,最重要的是你的额外学习成本是只服务于这个库的,与redux-observable

    4.1K20
    领券