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

如何为两个redux操作创建异步/等待结构?

为了为两个redux操作创建异步/等待结构,可以使用redux-thunk中间件。redux-thunk允许我们在action创建函数中返回一个函数而不是一个普通的action对象。这个返回的函数可以接收dispatch和getState作为参数,并且可以在其中进行异步操作。

下面是一个示例代码,展示了如何使用redux-thunk来创建异步/等待结构:

  1. 首先,安装redux-thunk依赖:
代码语言:txt
复制
npm install redux-thunk
  1. 在Redux应用的store配置中,将redux-thunk中间件应用于store:
代码语言:txt
复制
import { createStore, applyMiddleware } from 'redux';
import thunk from 'redux-thunk';
import rootReducer from './reducers';

const store = createStore(rootReducer, applyMiddleware(thunk));
  1. 创建一个异步的action创建函数,它返回一个函数而不是一个普通的action对象。在这个函数中,可以执行异步操作,并在操作完成后使用dispatch来分发相应的action。
代码语言:txt
复制
export const fetchData = () => {
  return (dispatch, getState) => {
    // 可以在这里执行异步操作,比如发送网络请求
    dispatch({ type: 'FETCH_DATA_REQUEST' });

    fetch('https://api.example.com/data')
      .then(response => response.json())
      .then(data => {
        // 异步操作完成后,使用dispatch分发相应的action
        dispatch({ type: 'FETCH_DATA_SUCCESS', payload: data });
      })
      .catch(error => {
        dispatch({ type: 'FETCH_DATA_FAILURE', payload: error });
      });
  };
};

在上面的示例中,fetchData是一个异步的action创建函数。它返回一个函数,这个函数接收dispatch和getState作为参数。在这个函数中,我们可以执行异步操作,比如发送网络请求。在异步操作完成后,我们使用dispatch来分发相应的action,以更新Redux store中的状态。

通过使用redux-thunk中间件,我们可以轻松地创建具有异步/等待结构的redux操作。这样,我们就可以在Redux应用中处理异步操作,比如发送网络请求,并在操作完成后更新应用的状态。

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

相关·内容

美团前端react面试题汇总

redux异步流中间件其实有很多,当下主流的异步中间件有两种redux-thunk、redux-saga。...redux-observable额外的范式,上⼿简单redux-thunk缺陷:样板代码过多: 与redux本身⼀样,通常⼀个请求需要⼤量的代码,⽽且很多都是重复性质的耦合严重: 异步操作redux的...中间件redux-saga优点:异步解耦: 异步操作被被转移到单独 saga.js 中,不再是掺杂在 action.js 或 component.js 中action摆脱thunk function:...提供了⼤量的Saga 辅助函数和Effect 创建器供开发者使⽤,开发者⽆须封装或者简单封装即可使⽤灵活: redux-saga可以将多个Saga可以串⾏/并⾏组合起来,形成⼀个⾮常实⽤的异步flow易测试...react性能优化方案重写shouldComponentUpdate来避免不必要的dom操作使用 production 版本的react.js使用key来帮助React识别列表中所有子组件的最小变化何为受控组件

5.1K30

redux-saga学习

如果redux需要用到 side effect 异步操作,redux-thunk 和 redux-saga 绝对是目前两个最受欢迎的中间件插件。...redux-saga redux-saga是一个用于管理redux应用异步操作的中间件,redux-saga通过创建sagas将所有异步操作逻辑收集在一个地方集中处理,可以用来代替redux-thunk...这意味着应用的逻辑会存在两个地方: reducer负责处理action的state更新 sagas负责协调那些复杂或者异步操作 React+Redux Cycle(来源:https://www.youtube.com...middleware 会检查每个 Effect 的描述信息,并进行相应的操作 createSagaMiddleware(options) 创建一个 Redux middleware...当然你也可以yield 一个 Promise来完成异步操作,但是这会让测试变得困难。 Task 一个 task 就像是一个在后台运行的进程。

2.7K10
  • 社招前端一面react面试题汇总

    redux-thunk缺陷:样板代码过多:与redux本身⼀样,通常⼀个请求需要⼤量的代码,⽽且很多都是重复性质的;耦合严重:异步操作redux的action偶合在⼀起,不⽅便管理;功能孱弱:有⼀些实际开发中常...redux-saga优点:异步解耦:异步操作被被转移到单独saga.js中,不再是掺杂在action.js或component.js中;action摆脱thunk function: dispatch的参数依然是...提供了⼤量的Saga辅助函数和Effect创建器供开发者使⽤,开发者⽆须封装或者简单封装即可使⽤;灵活:redux-saga可以将多个Saga可以串⾏/并⾏组合起来,形成⼀个⾮常实⽤的异步flow;易测试...redux-observable优点:功能最强:由于背靠rxjs这个强⼤的响应式编程的库,借助rxjs的操作符,你可以⼏乎做任何你能想到的异步处理;背靠rxjs:由于有rxjs的加持,如果你已经学习了rxjs...redux-observable缺陷:学习成本奇⾼:如果你不会rxjs,则需要额外学习两个复杂的库;社区⼀般:redux-observable的下载量只有redux-saga的1/5,社区也不够活跃,在复杂异步流中间件这个层

    3K20

    常见react面试题

    store中 redux使用plain object保存数据,需要手动处理变化后的操作;mobx适用observable保存数据,数据变化后自动处理响应的操作 redux使用不可变状态,这意味着状态是只读的...另外,浏览器爬虫不会等待我们的数据完成之后再去抓取页面数据。服务端渲染返回给客户端的是已经获取了异步数据并执行JavaScript脚本的最终HTML,网络爬中就可以抓取到完整页面的信息。...view -> action -> middleware -> reducer -> store ,在这一环节可以做一些"副作用"的操作异步请求、打印日志等。...中间件接受一个对象作为参数,对象的参数上有两个字段 dispatch 和 getState,分别代表着 Redux Store 上的两个同名函数。...可以使用自定义事件通信(发布订阅模式) 可以通过redux等进行全局状态管理 如果是兄弟组件通信,可以找到这两个兄弟节点共同的父节点, 结合父子间通信方式进行通信。 类组件和函数组件有何不同?

    3K40

    一天梳理完react面试高频题

    这种机制可以让我们改变数据流,实现异步action ,action 过滤,日志输出,异常报告等功能redux-logger:提供日志输出redux-thunk:处理异步操作redux-promise:...redux异步流中间件其实有很多,当下主流的异步中间件有两种redux-thunk、redux-saga。...redux-observable额外的范式,上⼿简单redux-thunk缺陷:样板代码过多: 与redux本身⼀样,通常⼀个请求需要⼤量的代码,⽽且很多都是重复性质的耦合严重: 异步操作redux的...中间件redux-saga优点:异步解耦: 异步操作被被转移到单独 saga.js 中,不再是掺杂在 action.js 或 component.js 中action摆脱thunk function:...提供了⼤量的Saga 辅助函数和Effect 创建器供开发者使⽤,开发者⽆须封装或者简单封装即可使⽤灵活: redux-saga可以将多个Saga可以串⾏/并⾏组合起来,形成⼀个⾮常实⽤的异步flow易测试

    4.1K20

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

    action ,而是使用 action创建函数 (千万别弄混淆), 顾名思义action创建函数就是一个函数,它的作用就是返回一个action,: function add() { return...redux-saga将react中的同步操作异步操作区分开来,以便于后期的管理与维护 ,redux- saga相当于在Redux原有数据流中多了一层,通过对Action进行监听,从而捕获到监听的Action...4.4、总结 总的来讲Redux Saga适用于对事件操作有细粒度需求的场景,同时它也提供了更好的可测试性,与可维护性,比较适合对异步处理要求高的大型项目 。...六、实际开发中使用redux 6.1、目录结构,在项目src里面创建即可 6.1.1、store store则是配置redux总仓库,createStore()则需要把reducer传进来,以及上文介绍到的中间件...,页面第一次会渲染,而不会说等待这个数据成功存入redux里面才会渲染页面。

    4.2K30

    2022社招react面试题 附答案

    由于JavaScript中异步事件的性质,当您启动API调⽤时,浏览器会在此期间返回执⾏其他⼯作。当React渲染⼀个组件时,它不会等待componentWillMount它完成任何事情。...redux适合有回溯需求的应⽤:⽐⼀个画板应⽤、⼀个表格应⽤,很多时候需要撤销、重做等操作,由于redux不可变的特性,天然⽀持这些操作。...redux-thunk缺陷: 样板代码过多:与redux本身⼀样,通常⼀个请求需要⼤量的代码,⽽且很多都是重复性质的; 耦合严重:异步操作redux的action偶合在⼀起,不⽅便管理; 功能孱弱:有...redux-saga优点: 异步解耦:异步操作被被转移到单独saga.js中,不再是掺杂在action.js或component.js中; action摆脱thunk function: dispatch...提供了⼤量的Saga辅助函数和Effect创建器供开发者使⽤,开发者⽆须封装或者简单封装即可使⽤; 灵活:redux-saga可以将多个Saga可以串⾏/并⾏组合起来,形成⼀个⾮常实⽤的异步flow;

    2.1K10

    React中的Redux

    Action创建函数 Action 创建函数 就是生成 action 的方法。“action” 和 “action 创建函数” 这两个概念很容易混在一起,使用时最好注意区分。...永远不要在 reducer 里做以下操作: 修改传入参数; 执行有副作用的操作 API 请求和路由跳转; 调用非纯函数, Date.now() 或 Math.random()。...它不应做有副作用的操作 API 调用或路由跳转。这些应该在 dispatch action 前发生。...其实整个过程和之前使用promise来实现的异步操作是一样的。我们是监听action,然后产生异步操作,执行dispatch方法,将数据结构保存到store中。...在异步操作这块,我们建议使用 redux-saga 中间件来创建更加复杂的异步 action。其中涉及到es6中的Generators可以在文档中查看。

    4K20

    社招前端二面必会react面试题及答案_2023-05-19

    用法与useEffect类似,只是区别于执行时间点的不同useEffect属于异步执行,并不会等待 DOM 真正渲染后执行,而useLayoutEffect则会真正渲染后才触发;可以获取更新后的 state...生成相似的树形结构,拥有不同类的两个组件 生成不同的树形结构。...图片那么问题来了,如果DOM节点出现了跨层级操作,diff会咋办呢?答:diff只简单考虑同层级的节点位置变换,如果是跨层级的话,只有创建节点和删除节点的操作。...注意:如果组件D和组件G的结构相似,但是 React判断是 不同类型的组件,则不会比较其结构,而是删除 组件D及其子节点,创建组件G及其子节点。...diff的不足与待优化的地方尽量减少类似将最后一个节点移动到列表首部的操作,当节点数量过大或更新操作过于频繁时,会影响React的渲染性能在 React 中,何为 stateState 和 props

    1.4K10

    前端常见react面试题合集

    库内部源码非常的简单,允许action是一个函数,同时支持参数传递,否则调用方法不变redux创建Store:通过combineReducers函数合并reducer函数,返回一个新的函数combination...函数中间件的主要目的就是修改dispatch函数,返回经过中间件处理的新的dispatch函数redux使用:实际就是再次调用循环遍历调用reducer函数,更新state何为纯函数(pure function...可以使用自定义事件通信(发布订阅模式)可以通过redux等进行全局状态管理如果是兄弟组件通信,可以找到这两个兄弟节点共同的父节点, 结合父子间通信方式进行通信。...在 Redux 中,何为 storeStore 是一个 javascript 对象,它保存了整个应用的 state。...能暂停当前组件的渲染, 当完成某件事以后再继续渲染,解决从react出生到现在都存在的「异步副作用」的问题,而且解决得非的优雅,使用的是 T异步但是同步的写法,这是最好的解决异步问题的方式提供了一个内置函数

    2.4K30

    滴滴前端常考react面试题(附答案)

    这里的复杂性很大程度上来自于:我们总是将两个难以理清的概念混淆在一起:变化和异步。 可以称它们为曼妥思和可乐。如果把二者分开,能做的很好,但混到一起,就变得一团糟。...一些库 React 视图在视图层禁止异步和直接操作 DOM来解决这个问题。美中不足的是,React 依旧把处理 state 中数据的问题留给了你。Redux就是为了帮你解决这个问题。...setState 是同步异步?为什么?实现原理?...为了合并setState,我们需要一个队列来保存每次setState的数据,然后在一段时间后执行合并操作和更新state,并清空这个队列,然后渲染组件。react-redux 的实现原理?...怎么操作

    2.3K10

    前端react面试题(边面边更)

    ,其中defaultProps是使用getDefaultProps的方法来获取默认组件属性的React.Component在创建组件时配置这两个对应信息时,他们是作为组件类的属性,不是组件实例的属性,也就是所谓的类的静态属性来配置的...);支持将store与React组件连接,react-redux,mobx- react;(2)区别 Redux更多的是遵循Flux模式的一种实现,是一个 JavaScript库,它关注点主要是以下几方面...中redux使用plain object保存数据,需要手动处理变化后的操作;mobx适用observable保存数据,数据变化后自动处理响应的操作redux使用不可变状态,这意味着状态是只读的,不能直接去修改它...这种机制可以让我们改变数据流,实现异步 action ,action 过 滤,日志输出,异常报告等功能常见的中间件:redux-logger:提供日志输出;redux-thunk:处理异步操作;redux-promise...: 处理异步操作;actionCreator 的返回值是 promise在哪个生命周期中你会发出Ajax请求?

    1.3K50

    学习react-redux,看这篇文章就够啦!

    thunk from "redux-thunk"; // 执行异步操作插件 import table from "....mapStateProps 函数返回一个对象,数据结构中的键值对,就是一个映射关系,: const mapStateToProps = (state) => { return { todos...在 React Redux 中,如果你想在组件挂载后执行异步操作或订阅状态变化,可以使用该钩子函数。...2、vuex 只适用于 vue 框架之中 # 设计上 1、redux redux 中不可以直接修改原始 state 数据,需要拷贝原数据进行修改 不可执行异步操作,但可以通过中间件处理异步操作 2、vuex...Vuex:在使用 Vuex 时,需要定义 state,然后编写 mutations 来修改 state,接着可以定义 actions 来处理异步操作,最后创建一个 Vuex 的实例并配置它。

    27520

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

    在实际项目中,一般都会有同步和异步操作,所以 Flux、Redux 之类的思想,最终都要落地到同步异步的处理中来。...处理异步 对于异步操作来说,有两个非常关键的时刻:发起请求的时刻,和接收到响应的时刻(可能成功,也可能失败或者超时),这两个时刻都可能会更改应用的 state。...对比Redux的中间件,Vuex 加入了 Action 这个东西来处理异步,Vuex的想法是把同步和异步拆分开,异步操作想咋搞咋搞,但是不要干扰了同步操作。...刚才介绍了两个Redux 处理异步的中间件 redux-thunk 和 redux-promise,当然 redux异步中间件还有很多,他们可以处理大部分场景,这些中间件的思想基本上都是把异步请求部分放在了...saga 还能很方便的并行执行异步任务,或者让两个异步任务竞争: // 并行执行,并等待所有的结果,类似 Promise.all 的行为 const [users, repos] = yield [

    5.5K10

    状态管理的概念,都是纸老虎

    在实际项目中,一般都会有同步和异步操作,所以 Flux、Redux 之类的思想,最终都要落地到同步异步的处理中来。...处理异步 对于异步操作来说,有两个非常关键的时刻:发起请求的时刻,和接收到响应的时刻(可能成功,也可能失败或者超时),这两个时刻都可能会更改应用的 state。...对比Redux的中间件,Vuex 加入了 Action 这个东西来处理异步,Vuex的想法是把同步和异步拆分开,异步操作想咋搞咋搞,但是不要干扰了同步操作。...刚才介绍了两个Redux 处理异步的中间件 redux-thunk 和 redux-promise,当然 redux异步中间件还有很多,他们可以处理大部分场景,这些中间件的思想基本上都是把异步请求部分放在了...saga 还能很方便的并行执行异步任务,或者让两个异步任务竞争: // 并行执行,并等待所有的结果,类似 Promise.all 的行为 const [users, repos] = yield [

    5.3K20

    react高频面试题总结(附答案)

    在源码中,通过 isBatchingUpdates 来判断setState 是先存进 state 队列还是直接更新,如果值为 true 则执行异步操作,为 false 则直接更新。...异步: 在 React 可以控制的地方,就为 true,比如在 React 生命周期事件和合成事件中,都会走合并操作,延迟更新的策略。...另外,浏览器爬虫不会等待我们的数据完成之后再去抓取页面数据。服务端渲染返回给客户端的是已经获取了异步数据并执行JavaScript脚本的最终HTML,网络爬中就可以抓取到完整页面的信息。...映射为真实的 DOM 操作是这样的,React 会创建一个 div 节点。...策略二:如果组件的 class 一致,则默认为相似的树结构,否则默认为不同的树结构。(基于组件进行对比)在组件比对的过程中:如果组件是同一类型则进行树比对;如果不是则直接放入补丁中。

    2.2K40

    React 原理问题

    但是之前数据结构不支持这样的实现异步 diff,于是 React 实现了一个类似链表的数据结构,将原来的 递归diff 变成了现在的 遍历diff,这样就能做到异步可更新了。...Suspense 让组件“等待”某个异步操作,直到该异步操作结束即可渲染 17. 为什么 JSX 中的组件名要以大写字母开头? 因为 React 要知道当前渲染的是组件还是 HTML 元素。 18....数据可变性的不同 Redux强调的是对象的不可变性,不能直接操作状态对象。而是在原来状态对象的基础上返回一个新的状态对象,最后返回应用的上一个状态 Mobx可以直接使用新值更新状态对象 4....20. redux 有哪些异步中间件?...1、redux-thunk 源代码简短优雅,上手简单 2、redux-saga 借助 JS 的 generator 来处理异步,避免了回调的问题

    2.5K00
    领券