欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Redux中異步action與同步action的使用

 更新時間:2022年07月29日 09:25:57   作者:codeMak1r.小新  
本文主要介紹了Redux中異步action與同步action的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

異步action

  • action:Object{} => 同步action
  • action:function() => 異步action
 同步action異步action
類型Object類型的對象function()函數(shù)
dispatch(action)同步的action被dispatch到store后;
store直接將其交給reducer加工。
異步的action函數(shù)被dispatch到store后;
store會先調(diào)用這個函數(shù),等待異步任務結(jié)束。
   

在這里插入圖片描述

store監(jiān)測到傳入的action是一個一般對象,那么store就知道這是一個同步的action,store就會把這個action交給Reducers去加工,執(zhí)行。

但是store若監(jiān)測到傳入的action是一個函數(shù),那么store就知道這是一個異步的action,store就會配合中間件,先調(diào)用這個函數(shù)。等到函數(shù)內(nèi)的異步任務結(jié)束,再調(diào)用函數(shù)內(nèi)部的同步的dispatch,再交給Reducers去加工狀態(tài)。同時,store調(diào)用這個包裹著異步任務的函數(shù)時,會傳入一個dispatch方法作為函數(shù)的參數(shù),以供函數(shù)內(nèi)部異步任務結(jié)束時使用這個同步的dispatch。

中間件(Middleware):redux-thunk

安裝中間件:

npm install redux-thunk
// 或
yarn add redux-thunk

引入中間件:

既然中間件是配合store使用的,那么當然是在store中引入并使用這個中間件

store.js:

/* 
  該文件專門用于暴露一個store對象,整個應用只有一個store對象
*/
// 引入createStore,專門用于創(chuàng)建redux中最為核心的store對象
import { legacy_createStore as createStore, applyMiddleware } from 'redux';
// 引入為Count組件服務的reducer
import countReducer from './count_reducer'
// 引入redux-thunk,用于支持異步action
import thunk from 'redux-thunk'
// 暴露store
export default createStore(countReducer, applyMiddleware(thunk))

代碼解釋:

applyMiddleware是redux中用于執(zhí)行中間件的函數(shù);

引入redux-thunk中間件;

在creaetStore時,將applyMiddleware傳入作為createStore的第二個參數(shù);

applyMiddleware本身是一個函數(shù),用于執(zhí)行中間件,所以要把(thunk)傳入applyMiddleware這個函數(shù)。

applyMiddleware(thunk)含義是:執(zhí)行thunk這個中間件。

這樣一來,store就會在接收到一個函數(shù)類型的action時,去調(diào)用這個action對應的函數(shù)。

并且,異步action中一般都會調(diào)用同步的action,所以store在調(diào)用這個異步action對應的函數(shù)時,會傳入dispatch方法作為參數(shù),以供異步任務結(jié)束后,使用這個dispatch方法調(diào)用同步的action。

count_action_creator.js:

/* 
  該文件專門為Count組件生成action動作對象
*/
import { INCREMENT, DECREMENT } from './constant'
// 同步action,就是指action的值為Object對象
export const createIncrementAction = data => ({ type: INCREMENT, data })
// ({ type: 'increment', data }) 相當于 { return { type: 'increment', data } }
export const createDecrementAction = data => ({ type: DECREMENT, data })

// 異步action,就是指action的值是函數(shù)
export const createIncrementAsyncAction = (data, time) => {
  return (dispatch) => {
    setTimeout(() => {
      dispatch(createIncrementAction(data))
    }, time)
  }
}

在Count組件中調(diào)用這個函數(shù):

incrementAsync = () => {
  const { value } = this.selectedNumber
  store.dispatch(createIncrementAsyncAction(value * 1, 500))
}

異步action總結(jié):

延遲的動作不想交給組件自身,想交給action時,可以使用異步的action
(但異步action并不是必須的);

何時需要異步action:
想對狀態(tài)進行操作,但是具體的數(shù)據(jù)靠異步任務返回;

具體編碼:

npm install redux-thunk

yarn add redux-thunk安裝中間件

創(chuàng)建action的函數(shù)不再返回一個一般對象,而是返回一個函數(shù),該函數(shù)中寫異步任務;

異步任務有結(jié)果后,使用store傳入的dispatch參數(shù)分發(fā)一個同步的action去真正操作數(shù)據(jù)

備注:異步action不是必須要寫的,完全可以自己在組件中等待異步任務的結(jié)果之后再去分發(fā)同步action。

 到此這篇關(guān)于Redux中異步action與同步action的使用的文章就介紹到這了,更多相關(guān)Redux 異步action與同步action內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解如何在React中有效地監(jiān)聽鍵盤事件

    詳解如何在React中有效地監(jiān)聽鍵盤事件

    React是一種流行的JavaScript庫,用于構(gòu)建用戶界面,它提供了一種簡單而靈活的方式來創(chuàng)建交互式的Web應用程序,在React中,我們經(jīng)常需要監(jiān)聽用戶的鍵盤事件,以便根據(jù)用戶的輸入做出相應的反應,本文將向您介紹如何在React中有效地監(jiān)聽鍵盤事件,并展示一些常見的應用場景
    2023-11-11
  • 詳解React路由傳參方法匯總記錄

    詳解React路由傳參方法匯總記錄

    這篇文章主要介紹了詳解React路由傳參方法匯總記錄,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • React?useEffect不支持async?function示例分析

    React?useEffect不支持async?function示例分析

    這篇文章主要為大家介紹了React?useEffect不支持async?function示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • React組件實例三大屬性state props refs使用詳解

    React組件實例三大屬性state props refs使用詳解

    這篇文章主要為大家介紹了React組件實例三大屬性state props refs使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • React中的Diff算法你了解嗎

    React中的Diff算法你了解嗎

    這篇文章主要為大家詳細介紹了React的Diff算法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • React動態(tài)更改html標簽的實現(xiàn)方式

    React動態(tài)更改html標簽的實現(xiàn)方式

    這篇文章主要介紹了React動態(tài)更改html標簽的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • React新文檔切記不要濫用Ref

    React新文檔切記不要濫用Ref

    這篇文章主要為大家介紹了React新文檔濫用Ref出現(xiàn)的問題詳解,以及如何正確的使用Ref,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-07-07
  • React文件名和目錄規(guī)范最佳實踐記錄(總結(jié)篇)

    React文件名和目錄規(guī)范最佳實踐記錄(總結(jié)篇)

    React在使用時非常靈活,如果沒有一個規(guī)范約束項目,在開發(fā)過程中會非?;靵y,本文將介紹幾個優(yōu)秀的規(guī)范,介紹文件名和目錄前,需要先簡述一下幾種通用的類型,用來區(qū)分文件的功能,感興趣的朋友一起看看吧
    2022-05-05
  • react-router-domV6嵌套路由實現(xiàn)詳解

    react-router-domV6嵌套路由實現(xiàn)詳解

    這篇文章主要為大家介紹了react-router-domV6嵌套路由實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • React?+?Typescript領(lǐng)域初學者的常見問題和技巧(最新)

    React?+?Typescript領(lǐng)域初學者的常見問題和技巧(最新)

    這篇文章主要介紹了React?+?Typescript領(lǐng)域初學者的常見問題和技巧,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06

最新評論