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

在redux thunk分派后从商店返回promise

Redux Thunk 是 Redux 的一个中间件,它允许你在 action creators 中编写异步逻辑。当使用 Redux Thunk 时,action creators 可以返回一个函数,而不是一个普通的 action 对象。这个函数接收 dispatchgetState 作为参数,使得你可以在函数体内执行异步操作,并在操作完成后使用 dispatch 分派一个普通的 action。

基础概念

Redux Thunk 的核心思想是将异步逻辑从组件中抽离出来,放到 action creators 中,使得组件只需要关心如何触发 action,而不需要知道这些 action 是如何处理异步操作的。

优势

  1. 代码组织:将异步逻辑放在 action creators 中,使得组件代码更加简洁,易于维护。
  2. 可测试性:分离了组件和异步逻辑,使得单元测试更加容易。
  3. 灵活性:可以自由地处理各种异步操作,如 API 请求、定时器等。

类型

Redux Thunk 主要处理的是返回 Promise 的异步操作。

应用场景

当你需要在 Redux 中处理异步操作时,如从服务器获取数据,Redux Thunk 是一个很好的选择。

示例代码

代码语言:txt
复制
// 安装 redux-thunk
import { createStore, applyMiddleware } from 'redux';
import thunk from 'redux-thunk';

// Reducer
const initialState = {
  data: null,
  loading: false,
  error: null
};

function reducer(state = initialState, action) {
  switch (action.type) {
    case 'FETCH_DATA_REQUEST':
      return { ...state, loading: true };
    case 'FETCH_DATA_SUCCESS':
      return { ...state, loading: false, data: action.payload };
    case 'FETCH_DATA_FAILURE':
      return { ...state, loading: false, error: action.payload };
    default:
      return state;
  }
}

// Action Creator
function fetchData() {
  return (dispatch) => {
    dispatch({ type: 'FETCH_DATA_REQUEST' });
    return fetch('https://api.example.com/data')
      .then(response => response.json())
      .then(data => dispatch({ type: 'FETCH_DATA_SUCCESS', payload: data }))
      .catch(error => dispatch({ type: 'FETCH_DATA_FAILURE', payload: error }));
  };
}

// 创建 store
const store = createStore(reducer, applyMiddleware(thunk));

// 使用 dispatch 触发异步操作
store.dispatch(fetchData());

遇到的问题及解决方法

问题:为什么从商店返回的 Promise 没有被解决?

原因

  1. 未正确安装或应用 Redux Thunk 中间件:确保你已经安装了 redux-thunk 并在创建 store 时应用了它。
  2. 未正确返回 Promise:确保你的 action creator 返回了一个函数,并且这个函数内部正确地返回了一个 Promise。

解决方法

  1. 检查 Redux Thunk 是否已正确安装和应用:
代码语言:txt
复制
import { createStore, applyMiddleware } from 'redux';
import thunk from 'redux-thunk';

const store = createStore(reducer, applyMiddleware(thunk));
  1. 确保 action creator 返回一个函数,并且这个函数内部返回一个 Promise:
代码语言:txt
复制
function fetchData() {
  return (dispatch) => {
    dispatch({ type: 'FETCH_DATA_REQUEST' });
    return fetch('https://api.example.com/data')
      .then(response => response.json())
      .then(data => dispatch({ type: 'FETCH_DATA_SUCCESS', payload: data }))
      .catch(error => dispatch({ type: 'FETCH_DATA_FAILURE', payload: error }));
  };
}

参考链接

通过以上步骤,你应该能够正确地使用 Redux Thunk 处理异步操作,并从商店返回 Promise。

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

相关·内容

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

用户的使用方式非常简单 用户之间没有协作 不需要与服务器大量交互,也没有使用 WebSocket 视图层(View)只单一来源获取数据 组件角度看,如果你的应用有以下场景,可以考虑使用 Redux。...从简单的 react-thunkredux-promise 再到 redux-saga等等,都代表这各自解决redux异步流管理问题的方案 4.1 、redux-thunk redux-thunk...尽管redux-thunk很简单,而且也很实用,但人总是有追求的,都追求着使用更加优雅的方法来实现redux异步流的控制,这就有了redux- promise。...4.2、redux-promise 使用redux-promise中间件,允许action是一个promisepromise中,如果要触发action,则通过调用resolve来触发 4.3、redux-sage...五、使用redux-dev-tools插件调试redux 5.1、下载插件 首先在谷歌商店搜索redux-dev-tools,下载这个插件,然后重启浏览器 redux中的store文件进行配置 若是JS

4.3K30
  • 造一个 redux-thunk 轮子

    不过,我觉得这是结果出发找造这个轮子的原因,并不能从需求层面解释这个中间件到底解决了什么问题。 本文希望解决问题的角度来推导 redux-thunk 诞生的原因。...解耦 上面的代码很多业务里非常常见,常见到我们根本不需要什么 redux-thunkredux-saga 来处理。...会发现 redux-thunk 并没有解决什么实际问题,只是提供了一种写代码的 “thunk 套路”,然后 dispatch 的时候自动 “解析” 了这样的套路。 那有没有别的 pattern 呢?...目前来说,redux-thunk, redux-saga 以及 redux-loop 是比较常用的 “pattern 解析器”,他们自己都提供了一套属于自己的 pattern,让开发者自己的框架里随意...要不要使用 redux-thunk? 如果你第 1 步的时候就觉得依不依赖 dispatch 对我都没什么影响,组件里直接用 dispatch 也很方便呀。

    74730

    应用到源码-深入浅出Redux

    没关系,稍后我们自己实现完基础的 redux 回头来看我相信你会清晰的。...(action) } 复制代码 上述我们简化了对应中间件需要 compose 的代码,注意当我们调用 compose 时比如: compose(logger,thunk,promise) 中间件的组合顺序是右往左...此时 composeFn 内部对于 [logger,thunk,promise] 使用 for 循环进行了逆序调用。...经过 for 循环第一次迭代,此时 args store.disaptch 变成了 promise返回的函数(这里我们称为promiseAction 函数) (action) => { console.log...并且传入的 args 参数(此时args指向上一次 promise middleware 处理返回函数): // 调用该函数 next 即使 args ,指向上一次处理返回的函数 const thunk

    1.3K10

    Redux异步解决方案之Redux-Thunk原理及源码解析

    本文会讲解Redux官方实现的异步解决方案----Redux-Thunk,我们还是会基本的用法入手,再到原理解析,然后自己手写一个Redux-Thunk来替换它,也就是源码解析。...Redux-Thunk前我们dispatch的action必须是一个纯对象(plain object),使用了Redux-Thunk,dispatch可以支持函数,这个函数会传入dispatch本身作为参数...(increment()); }, 1000); 这样写同样可以1秒发出增加的action,而且代码还更简单,那我们为什么还要用Redux-Thunk呢,他存在的意义是什么呢?...你可能会发现很多例子都返回Promise,这个不是必须的,但是用起来却很方便。Redux并不关心你的thunk返回了什么值,但是他会将这个值通过外层的dispatch()返回给你。...这就是为什么你可以thunk返回一个Promise并且等他完成: dispatch(someThunkReturningPromise()).then(...)

    3.6K51

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

    比如 redux-thunkredux-promise,分别是使用异步回调和 Promise 来解决异步 action 问题的。...thunk就是简单的action作为函数,action进行异步操作,发出新的action。...**redux-thunkredux-promise 刚好就是代表这两个面。 当业务逻辑多且复杂的时候会发生什么情况呢?...redux-saga的优势 Redux 处理异步的中间件 redux-thunkredux-promise,当然 redux 的异步中间件还有很多,他们可以处理大部分场景,这些中间件的思想基本上都是把异步请求部分放在了...vuex 真正限制你的只有 mutation 必须是同步的这一点( redux 里面就好像 reducer 必须同步返回下一个状态一样)。

    3.7K40

    React saga_react获取子组件ref

    call 有阻塞地调用 saga 或者返回 promise 的函数,只触发某个动作。 takeEvery 循环监听某个触发动作,我们通常会使用while循环替代。...---- 最近将项目中redux的中间件,redux-thunk替换成了redux-saga,做个笔记总结一下redux-saga的使用心得,阅读本文需要了解什么是reduxredux中间件的用处是什么...这些Effect执行,当函数resolve时返回一个描述对象,然后redux-saga中间件根据这个描述对象恢复执行generator中的函数。...工作流中,我们发现redux-saga执行完副作用函数,必须发出action,然后这个action被reducer监听,从而达到更新state的目的。...4.redux-saga实现一个登陆和列表样例 接着我们来实现一个redux-saga样例,存在一个登陆页,登陆成功,显示列表页,并且,列表页,可 以点击登出,返回到登陆页。

    4.5K30

    【JS】336- 拆解 JavaScript 中的异步模式

    总的来说,thunk 是一种函数,其返回值也是一个函数。...提到 thunk,你可能马上就会想到 redux-thunk,其对自己的定义如下: Redux Thunk middleware allows you to write action creators...同步的角度看,thunk 是一种函数,这种函数已经包含了所有你需要的值,你不需要传入任何参数,仅仅需要调用它,它就会将值返回给你。...async 函数只有结束时,才会返回的是一个 Promise。我们无法控制其中间状态,而 generator 返回的是迭代器,迭代器让你有充分的控制权。...也许熟悉了各种异步模式,遇到了具体的问题,第一时间想到的就会是最合适的方式。 JS 中是怎么实现异步的 前面我们提到, Promise 之前,JavaScript 语言本书是没有异步这个概念的。

    81230

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

    那怎么才能 Reducer 异步操作结束自动执行呢?Redux 引入了中间件 Middleware 的概念。...显然,用 Redux 处理异步,可以自己写中间件来处理,当然大多数人会选择一些现成的支持异步处理的中间件。比如 redux-thunkredux-promise 。...Redux-promise redus-promiseredux-thunk 的思想类似,只不过做了一些简化,成功失败手动 dispatch 被封装成自动了: const FETCH_DATA =...redux-thunkredux-promise 刚好就是代表这两个面。 redux-thunkredux-promise 的具体使用就不介绍了,这里只聊一下大概的思路。...大部分简单的异步业务场景,redux-thunk 或者 redux-promise 都可以满足了。 上面说的 Flux 和 Redux,和具体的前端框架没有什么关系,只是思想和约定层面。

    5.5K10

    【JS】285- 拆解 JavaScript 中的异步模式

    总的来说,thunk 是一种函数,其返回值也是一个函数。...提到 thunk,你可能马上就会想到 redux-thunk,其对自己的定义如下: Redux Thunk middleware allows you to write action creators...同步的角度看,thunk 是一种函数,这种函数已经包含了所有你需要的值,你不需要传入任何参数,仅仅需要调用它,它就会将值返回给你。...async 函数只有结束时,才会返回的是一个 Promise。我们无法控制其中间状态,而 generator 返回的是迭代器,迭代器让你有充分的控制权。...也许熟悉了各种异步模式,遇到了具体的问题,第一时间想到的就会是最合适的方式。 JS 中是怎么实现异步的 前面我们提到, Promise 之前,JavaScript 语言本书是没有异步这个概念的。

    82121
    领券