redux异步action_react-redux--异步Action

上两篇文章叙述的都是同步操作,每当 dispatch action 时,state 会被立即更新。但是实际应用中,我们有很多操作执行后,过一段时间,才会得到结果。那么怎么处理这种情况呢?

先熟悉一个概念

中间件

本质就是一个通用函数,可以在程序的任何执行处介入,从而将处理方法扩展到现有系统上。

在store.dispatch(action) 执行时候,打印日志,这就是一个简单的中间件

let next = store.dispatch;

store.dispatch = action => {

next(action);

console.log('state after dispatch', getState())

}

引入中间件 redux-thunk

redux-thunk中间件,允许action creator返回一个函数,这个函数会接收dispath和getState?为参数。

看下面三种不同的action

const INCREMENT_COUNTER = 'INCREMENT_COUNTER';

普通的,返回一个对象

function increment() {

return {

type: INCREMENT_COUNTER

};

}

异步的,返回一个函数

function incrementAsync() {

return dispatch => {

setTimeout(() => {

// Yay! Can invoke sync or async actions with `dispatch`

dispatch(increment());

}, 1000);

};

}

带条件的,返回一个函数

function incrementIfOdd() {

return (dispatch, getState) => {

const { counter } = getState();

if (counter % 2 === 0) {

return;

}

dispatch(increment());

};

}

使用中间件 redux-thunk

需求:

进入页面之后,点击某个按钮,获取用户投资总额。。。

分析:

异步请求有3个关键action

开始请求--一般用于呈现加载进度条

请求成功--关闭进度条,加载数据

请求失败--关闭进度条,展示错误信息

import { createStore, applyMiddleware } from 'redux';

import thunk from 'redux-thunk'; //导入thunk

import rootReducer from './reducers/index';

// Note: this API requires redux@>=3.1.0

const store = createStore(

rootReducer,

applyMiddleware(thunk)//激活thunk中间件

);

//一个异步请求

function fetchAmount() {

return fetch('https://www.renrendai.com/getAmount?userId=123')

}

//通知 reducer 请求开始的 action

requestPost(){

return{

type: REQUEST_POSTS,

isFetch:true //进度条相关

}

}

//通知 reducer 请求成功的 action

receviePostOnSuccess( data){

return{

type: RECEIVE_POSTS,

isFetch:false,

amount: data.amount

}

}

//通知 reducer 请求失败的 action。

receviePostOnError( message){

return{

type: RECEIVE_POSTS,

isFetch:false,

errorMsg:message

}

}

//异步请求action 【将上面3个基础的action整合】

function getAmount(){

retrun (dispath)=>{

// 首次 dispatch:更新应用的 state 来通知API 请求发起了

dispatch(requestPosts())

//异步请求后端接口

return fetchAmount().then(

data=>dispath(receviePostOnSuccess(data)),

error=> dispatch(receviePostOnError('error))

)

}

}

也很容易理解吧~~~

本文档是将最基础的使用方法提炼呈现,真正的react-redux博大精深,如果想继续深究,就赶紧找一个简单的项目开始练手吧。

参考文档:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/533458.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎么批量修改html文件后缀,如何批量修改文件后缀名

我们都知道电脑文件都有一个格式,比如JPG、MP3等等格式,每个格式都代表不一样文件类型,那么我们该如何批量更改文件类型的后缀呢?比如把JPG更改为MP3,只要在电脑里设置不隐藏文件扩展名,然后建立统一的文件夹&#xf…

python 怎么调用 矩阵 第几行_第58集 python机器学习:混淆矩阵精度指标

混淆矩阵的精度计算公式为:精度(TPTN)/(TPTNFPFN),也就是说,精度就是指正确的预测数目除以所有样本的数量。准确率、召回率与f-分数:总结混淆矩阵还有几种方法,其中最常见的就是准确率和召回率。准确率度量的是被预测为…

android seekbar闪退,android seekbar 踩坑之路

最近项目中有用到seekbar,之前对这东西不太了解,趁机来踩坑。seekbar样式按我觉得Material 中的还不算难看了。但是美工给了自己的样式,还是得改。主要有这2个属性:android:thumb"drawable/thumb"android:progressDrawable"dr…

tensorflow分类的loss函数_tensorflow 分类损失函数使用小记

多分类损失函数label.shape:[batch_size]; pred.shape: [batch_size, num_classes]使用 tf.keras.losses.sparse_categorical_crossentropy(y_true, y_pred, from_logitsFalse, axis-1)- y_true 真实值, y_pred 预测值- from_logits,我的理解是,如果预测…

华为鸿蒙系统还没发布吗,华为没有孤军奋战,合作伙伴“雪中送炭”,鸿蒙系统正式发布!...

6月2日晚上,期待许久的鸿蒙0S 2终于正式登场了,这意味着鸿蒙手机已经变成了面向市场的正式产品,这是华为迈出的一小步,却是国产系统与安卓、iOS竞争的开始。在鸿蒙OS正式推出后,不少华为手机用户已经收到了系统更新的推…

freemark循环map_java与freemarker遍历map

一、java遍历MAP/*** 1.把key放到一个集合里,遍历key值同时根据key得到值 (推荐)*/Set set map.keySet();Iterator itset.iterator();while(it.hasNext()){String s (String) it.next();System.out.println(map.get(s));}/*** 2.把一个map对象放到放到entry里&#…

.net 开发 html框架,Asp.net的开发框架

Asp.net的开发首先要选择开发框架,选择怎样框架要看看开发什么养的网站用的,选择一个适合的开发框架能节约很多的时间。20个优秀的前端框架:1. Twitter BootStrap (Apache v2.0;响应式)时髦、直观并且强大的前端框架,让…

baseresponse响应类_内部类、响应类Response、序列化基类、反序列化、全局局部钩子...

一、内部类1、概念:将类定义在一个类的内部,被定义的类就是内部类2、特点:内部类及内部类的所以名称空间,可以直接被外部类访问的3、 应用:通过内部类的名称空间,给外部类额外拓展一些特殊的属性(配置)&…

python模块名限定_python 正则表达式 匹配 ?的使用 限定符 sys.re模块

特殊字符:注意\b是匹配单词而非字符串的开始和结束; \w不能匹配汉字限定符放在匹配符的后边2 括号分组:(\d\d\d){2} #有括号匹配6位数字\d\d\d{2} #没有括号匹配4位数字3 ?的使用4 sys.re模块的常用函数表:查找、分隔、…

计算机不能进入桌面,电脑开机无法进入桌面,请高手解决。

该故障是Windows XP操作系统关机故障中最容易出现的故障。造成该故障的原因可能有以下几方面原因:系统设置在添乱Windows XP默认情况下,当系统出现错误时会自动重新启动,这样当用户关机时,如果关机过程中系统出现错误就会重新启动…

太阳能板清洗机器人科沃斯_太阳能电池板清洁机器人

太阳能电池板清洁机器人锐宝RAYBOT,可以实现自动升降式地免水清扫,使常年暴露在太阳下的电池板能彻底摆脱灰尘和污垢。当放置在太阳能电池板上时,锐宝能够自主行走、跨越最大3cm间隙并自动规划路线。底部吸盘设计能使RAYBOT安全地吸附在最大安…

html jq 控制显示密码,js、jquery分别实现点击密码输入框密码显示和隐藏

很多密览始不次这得是觉砖怎可我滚脑选的方近器上码框都有个眼睛标记,点击能显示密码。原理就是点击切换password为te要圈器是天的年编功小还久概据含直这请框结业未商屏页屏随会维气大机域页效实一应控高标近用功的xt等显示主要知识点:onmousedown&…

maven依赖循环引用_maven循环引用的问题

多模块的maven工程,有时候由于设计的不合理或者需求的变更。会导致模块之间产生循环依赖,编译的时候会报如下的错误:[INFO] Scanning for projects... [ERROR] The projects in the reactor contain a cyclic reference: Edge between .....重…

翻翻看 类型html5,3款容易上手的HTML5编辑工具推荐~

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼我们的生活已经时刻可见H5页面的身影,从美食到用车、从购物到求职,可以说HTML5技术对我们生活的影响是颠覆性的。今天小编就给大家推荐5款容易上手的H5页面,大家可以通过自己制作H5页面来感受一下…

ilm 和dlm差异_《存储e周刊》第28期 信息生命周期管理之争

说二月份的最后一周是ILM之周,完全是因为EMC在华推出了其历史上最广泛的分级存储平台组合,跨高端、中端、网络附加存储(NAS)与内容寻址存储(CAS)的全部系列,希望以此帮助客户实现信息在整个生命周期中的最大价值。而信息生命周期管理的存储理…

幼儿园体育游戏电子计算机教案,【幼儿园体育跳圈圈教案】小班体育教案跳圈圈_小班跳圈圈游戏教案_亲亲宝贝网...

教案二:小兔跳圈活动目标:1、在原地纵跳和短距离双脚连续向前跳的基础上,尝试较长距离双脚连续向前跳圈。2、提高身体的协调能力和弹跳能力。活动准备:1、材料准备:呼啦圈若干、小兔头饰、蘑菇、篮子。2、游戏场地设置…

crtsiii型无砟轨道板_自主知识产权CRTSⅢ型轨道板助力,赣深铁路无砟轨道轨道板灌注第一工作面完成...

(本报河源讯 通讯员 陈前名 杨琰妤)11月29日,伴随着碧源中桥轨道板最后一方自密实混凝土浇筑完成,标志着由中国中铁四局机电公司赣深铁路项目部负责施工的第一工作面无砟轨道工程圆满完成,为实现年底全线轨道板全部灌注的目标奠定了坚实基础。…

thymeleaf 复选框回显_Thymeleaf+layui+jquery复选框回显

一、Thymeleaflayuijquery复选框回显基于Thymeleaf模板下的layuijquery复选框回显,主要是jquery。大致意思是:把数组转成JSON传到前台,再在前台转回数组 AJAX一般都是用JSON格式或XML格式来传递数据的JSON就是一种具有特殊格式的字符串。1.实…

计算机网络画出发送窗口变化,全国2010年7月自考计算机网络原理试题及答案

全国2010年7月自考计算机网络原理试题及答案课程代码:04741一、单项选择题(本大题共24小题,每小题1分,共24分)在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。1.由一…