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.pswp.cn/news/533458.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/533458.shtml
英文地址,請注明出處:http://en.pswp.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.由一…