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

Redux Thunk未调度

Redux Thunk 是 Redux 的一个中间件,它允许你在 action creators 中编写异步逻辑。这意味着你可以在 action creator 中执行异步操作(例如 API 调用),然后在操作完成后分发同步或异步的 action。

基础概念

Redux Thunk 的核心思想是,action creator 可以返回一个函数而不是一个普通的 action 对象。当 Redux Thunk 中间件看到这个函数时,它会调用这个函数,并将 dispatchgetState 作为参数传递给它。这使得你可以在函数内部执行异步操作,并在适当的时候使用 dispatch 分发 action。

优势

  1. 简化异步逻辑:Redux Thunk 使得在 Redux 中处理异步操作变得更加简单和直观。
  2. 代码组织:通过将异步逻辑封装在 action creators 中,可以保持 reducer 的纯净性,使其只关注如何根据 action 更新状态。
  3. 灵活性:你可以根据需要在 action creator 中编写复杂的异步逻辑,包括条件分支、错误处理等。

类型

Redux Thunk 主要涉及两种类型的 action:

  1. 普通 action:由对象表示,包含 type 和其他 payload 数据。
  2. thunk action:由返回函数的 action creator 创建,这个函数接收 dispatchgetState 作为参数。

应用场景

Redux Thunk 适用于需要在 Redux 中处理异步操作的场景,例如:

  • 数据获取(从 API 获取数据)
  • 表单提交(处理表单提交后的异步响应)
  • 用户认证(处理登录、注册等异步操作)

问题与解决

如果你遇到 Redux Thunk 未调度的问题,可能是由以下原因导致的:

  1. 未正确安装或配置 Redux Thunk:确保你已经安装了 redux-thunk 包,并在创建 Redux store 时应用了它。
代码语言:txt
复制
import { createStore, applyMiddleware } from 'redux';
import thunk from 'redux-thunk';
import rootReducer from './reducers';

const store = createStore(rootReducer, applyMiddleware(thunk));
  1. action creator 未返回函数:确保你的 action creator 在需要处理异步逻辑时返回一个函数。
代码语言:txt
复制
// 错误的 action creator
const fetchData = () => {
  // 这里应该是异步操作,但返回的是一个对象而不是函数
  return { type: 'FETCH_DATA' };
};

// 正确的 action creator
const fetchData = () => async (dispatch, getState) => {
  dispatch({ type: 'FETCH_DATA_REQUEST' });
  try {
    const response = await fetch('/api/data');
    const data = await response.json();
    dispatch({ type: 'FETCH_DATA_SUCCESS', payload: data });
  } catch (error) {
    dispatch({ type: 'FETCH_DATA_FAILURE', error });
  }
};
  1. 未正确分发 thunk action:确保你在组件中正确地调用了 thunk action creator。
代码语言:txt
复制
import { useDispatch } from 'react-redux';
import { fetchData } from './actions';

const MyComponent = () => {
  const dispatch = useDispatch();

  useEffect(() => {
    dispatch(fetchData());
  }, [dispatch]);

  // ...
};

参考链接

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

相关·内容

React-Redux-thunk

前言React-Redux-Thunk是一个用于处理Redux异步操作的中间件,它扩展了Redux的能力,使您能够更轻松地处理异步操作,如网络请求或定时任务。...通常,Redux的reducers是同步的,但在现实应用中,需要在数据获取或其他异步操作完成后才能更新状态。这就是React-Redux-Thunk发挥作用的地方。...在 Redux 中获取网络数据使用 redux-thunk 中间件redux-thunk 作用默认情况下 dispatch 只能接收一个对象, 使用 redux-thunk 可以让 dispatch 除了可以接收一个对象以外...使用 redux-thunk安装 redux-thunknpm install redux-thunk在创建 store 时应用 redux-thunk 中间件修改 store.js:import {createStore..., applyMiddleware} from 'redux'import thunkMiddleware from 'redux-thunk'import reducer from '.

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

    本文会讲解Redux官方实现的异步解决方案----Redux-Thunk,我们还是会从基本的用法入手,再到原理解析,然后自己手写一个Redux-Thunk来替换它,也就是源码解析。...Redux-Thunk和前面写过的Redux和React-Redux其实都是Redux官方团队的作品,他们的侧重点各有不同: Redux:是核心库,功能简单,只是一个单纯的状态机,但是蕴含的思想不简单...React-Redux:是跟React的连接库,当Redux状态更新的时候通知React更新组件。 Redux-Thunk:提供Redux的异步解决方案,弥补Redux功能的不足。...PS: Dan Abramov是Redux生态的核心作者,这几篇文章讲的Redux,React-ReduxRedux-Thunk都是他的作品。...照例我们先来分析下要点: Redux-Thunk是一个Redux中间件,所以他遵守Redux中间件的范式。

    3.5K51

    深度剖析github上15.1k Star项目:redux-thunk

    接下来笔者将从: Redux的工作机制 中间件实现原理 redux-thunk源码实现 这三个方面来带大家彻底掌握redux-thunk源码,从而对redux有更深入的了解和应用。...如果大家对react-redux-redux-thunk实战感兴趣的,读完之后可以移步笔者的《彻底掌握redux》之开发一个任务管理平台 正文 在解读Redux-thunk源码之前我们需要先掌握redux...到这一步我们仍然不能直接进入redux-thunk的源码分析,因为我们还是不清楚如何解决上述步骤,因为我们还没有了解redux的中间件机制。...在掌握了redux中间件实现原理之后, 我们再来看redux-thunk源码就非常容易理解了。..., 这就是redux-thunk的全部源码了,是不是很nice~。

    75020

    应用connected-react-router和redux-thunk打通react路由孤立

    , [preloadedState], enhancer) 所以我们创建 store 的代码如下: import thunk from 'redux-thunk' import { createStore...但是有一个问题,store.dispatch正常情况下,只能发送对象,而我们要发送函数,为了让store.dispatch可以发送函数,我们使用中间件——redux-thunk。...引入 redux-thunk 很简单,只需要在创建 store 的时候使用applyMiddleware(thunk)引入即可。.../logOnly 如果不想在生产环境使用扩展,那就只开启redux-devtools-extension/developmentOnly就好点击文章查看更多细节 import thunk from "redux-thunk...的路由拆分与按需加载 React Router 4 简介及其背后的路由哲学 异步 Action redux 中间件之 redux-thunk Redux 入门教程(二):中间件与异步操作 https:

    2.4K00

    redux&react-redux

    redux是什么 1、redux是一个专门用于做状态管理的js库(不是react插件库)。 2、它可以用在react,angular,vue等项目中,但基本与react配合使用。...:获取store的值 api createStore :专门用于创建redux中最为核心的store对象 applyMiddleware :中间件,用于配合redux-thunk(插件,需要引入)支持异步...容器组件:负责和redux通信,将结果交给UI组件 api Provider : 无需自己给容器组件传递store,给根组件包裹一个 即可 connect:生成一个容器组件,并暴露 //简写 mapStateToProps...2、store文件 引入createStore 有异步操作引入 applyMiddleware 和引入并安装插件redux-thunk 引入合并为对象的rootReducer 导出语句export...default createStore(rootReducer, applyMiddleware(thunk)) 3、containers文件夹 容器组件与UI组件合并到一个文件 引入connect

    10610

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

    redux异步流中间件其实有很多,当下主流的异步中间件有两种redux-thunkredux-saga。...(1)使用react-thunk中间件 redux-thunk优点: 体积⼩: redux-thunk的实现⽅式很简单,只有不到20⾏代码 使⽤简单: redux-thunk没有引⼊像redux-saga...或者redux-observable额外的范式,上⼿简单 redux-thunk缺陷: 样板代码过多: 与redux本身⼀样,通常⼀个请求需要⼤量的代码,⽽且很多都是重复性质的 耦合严重: 异步操作与redux.../reducer'; import thunk from 'redux-thunk' // 设置调试工具 const composeEnhancers = window....缺陷: 额外的学习成本: redux-saga不仅在使⽤难以理解的 generator function,⽽且有数⼗个API,学习成本远超redux-thunk,最重要的是你的额外学习成本是只服务于这个库的

    2K00

    第二十篇:从 Redux 中间件实现原理切入,理解“面向切面编程”

    支持异步数据流的 Redux 中间件有很多,其中最适合用来快速上手的应该就是 redux-thunk了。...redux-thunk 的引入和普通中间件无异,可以参考以下示例: // 引入 redux-thunk import thunkMiddleware from 'redux-thunk' import...redux-thunk import thunk from 'redux-thunk'; // 引入 reducer import reducer from '....redux-thunk 的源码其实非常简洁,我第一次接触时还是在 2016 年,这么多年过去了,很多事情都变了,唯一不变的是 redux-thunk,它仍然那么好懂。...若 action 是一个函数,那么 redux-thunk 就会执行它并且返回执行结果;若 action 不是一个函数,那么它就不是 redux-thunk 的处理目标,直接调用 next,告诉 Redux

    37630
    领券