Redux异步解决方案 1. Redux-Thunk中间件
时间:2022-07-22
本文章向大家介绍Redux异步解决方案 1. Redux-Thunk中间件,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
简单介绍一下thunk
,这是一个中间件,是解决redux
异步问题产生的。我们都知道,在使用redux
的时候,通过dispatch
一个action
发生到reducer
然后传递给store
修改状态 一系列都是同步的,那如果说我dispatch
一个action
这个action
帮我请求一下接口数据,你发现接口请求是异步的,没有办法等接口数据返回再传递给reducer
这个时候中间件就产生啦。
redux
比较常用的中间件有 redux-saga
、redux-thunk
、redux-promise
等 都是为了解决dispatch
action
异步处理问题
redux中间件 对redux应用实现异步
使用 thunk
等中间件可以帮助在 Redux 应用中实现异步性。可以将 thunk
看做 store 的 dispatch()
方法的封装器;我们可以使用 thunk
action creator 派遣函数或 Promise,而不是返回 action 对象。
例如:正常请求接口完再使用dispatch去修改状态。但是如果想在dispath -> action里面执行异步操作 就需要thunk
注意,没有 thunk
的话,默认地是同步派遣。
redux-thunk 使用实例:
首先安装:yarn add redux-thunk
- store.js
import { createStore, combineReducers, applyMiddleware } from 'redux';
import thunk from 'redux-thunk';
import {add, deleter} from './Reducers/TodoList';
// combineReducers 合并多个reducer
// applyMiddleware是redux提供了应用中间件的函数 只要应用了中间件 dispatch的流程就可以经过中间件了
// 例如以前是: dispatch -> action -> reducer -> store
// 现在是: dispatch -> action -> middleware -> reducer -> store
export default createStore(
combineReducers({add, deleter}),
applyMiddleware(thunk) // 应用thunk中间件
);
// 在对dispatch函数进行映射时 action creator 可以直接返回一个函数 不用直接返回action 这使得里面可以写异步操作 先去请求接口 在去dispatch一个action到reducer
// 当应用了thunk中间件时 action creator返回的函数都会默认传递一个dispatch的方法 然后再去dispatch action
const mapDispatchToProps = {
dispatchListAction: (res) => {
return {
type: FETCH_LIST,
payload: res
};
};
getList: () => {
return (dispatch) => {
fetch('http://jsonplaceholder.typicode.com/posts').then((res) => {
return res.json()
}).then(res => {
dispatch(mapDispatchToProps.dispatchListAction(res));
})
}
}
};
redux-thunk源码
源码仅仅只有10多行,虽然这有几行代码,但仍不失为是一个好的组件,简单就可以解决异步问题 有兴趣的可以去阅读一下源码 这里就不做源码剖析了
源码阅读的话应该先从applyMiddleware这个函数开始入手 然后方知thunk之精髓
本文为作者原创,手码不易,允许转载,转载后请以链接形式说明文章出处。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【C++简明教程】C++基本语法
- 【多目标跟踪】搞不懂MOT数据集,会跑代码有啥用!
- 手工 - 内网信息收集
- 使用ffmpeg压缩视频之烦和fun
- 一文学会 Web Service漏洞挖掘!
- 【实战项目代码分享】计算机视觉入门教程&实战项目代码
- Linux部署DNS服务器
- 【C++简明教程】C++简介与环境配置
- PDF 的各种操作,我用 Python 来实现(附网站和操作指导)
- Python中map()函数用法
- 谈谈不同思路下造就的不同产品与公司形态
- OpenCV 处理中文路径、绘制中文文字的烦恼,这里通通帮你解决!
- 如何快速分析大型系统架构?
- Linux小技巧、文件查找、修改、读取
- 我在赏金计划中发现的RACE条件漏洞