亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

redux副作用處理之redux-thunk使用

 更新時間:2024年01月25日 09:26:35   作者:Shi Jian Xin  
這篇文章主要介紹了redux副作用處理之redux-thunk使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

一、安裝

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

二、使用

import { createStore, applyMiddleware } from "redux";
import * as loginActions from "./action/login";
import reducer from "./reducer";
import logger from "redux-logger";
import thunk from "redux-thunk";

// 創(chuàng)建倉庫
const store = applyMiddleware(thunk, logger)(createStore)(reducer);

三、為什么要使用redux-thunk?

redux中的action都必須要是一個平面對象,所以就不能有任何的副作用,redux-thunk就是為了解決這一問題,使用redux-thunk中間件后,允許action返回一個函數(shù),這個函數(shù)是允許有副作用的

例如:

寫一個帶有副作用的action:

export function setTime(payload) {
  return function () {
    setTimeout(() => {
      console.log("定時器");
    }, 1000);
  };
}

如果沒有使用redux-thunk會直接報錯顯示action必須是一個平面對象

import { createStore, applyMiddleware } from "redux";
import * as loginActions from "./action/login";
import reducer from "./reducer";
import logger from "redux-logger";
import thunk from "redux-thunk";

// 創(chuàng)建倉庫
const store = applyMiddleware(logger)(createStore)(reducer);
store.dispatch(loginActions.setTime());

使用了redux-thunk中間件后正常運(yùn)行

四、redux-thunk運(yùn)行原理

redux-thunk中間件一般放在第一個,因為它在接收action時如果發(fā)現(xiàn)action不是一個平面對象

那么它就不會傳遞給下一個中間件

它會直接將這個函數(shù)運(yùn)行

如果action是一個平面對象它才會往后傳遞

五、redux-thunk原理

redux-thunk會返回給action3個參數(shù)

  • 1.dispatch:store的dispatch
  • 2.getState:store的getState
  • 3.extraArgument:用戶傳入的參數(shù)

源碼:

function createThunkMiddleware(extraArgument) {
  return ({ dispatch, getState }) => next => action => {
    // 如果當(dāng)前的action是一個函數(shù)直接調(diào)用該函數(shù)
    if (typeof action === 'function') {
      return action(dispatch, getState, extraArgument);
    }

    // 如果當(dāng)前的action是一個平面對象,傳遞個下一個中間件
    return next(action);
  };
}

const thunk = createThunkMiddleware();
// 可以使用withExtraArgument傳入一個參數(shù)
thunk.withExtraArgument = createThunkMiddleware;

export default thunk;

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • React Native AsyncStorage本地存儲工具類

    React Native AsyncStorage本地存儲工具類

    這篇文章主要為大家分享了React Native AsyncStorage本地存儲工具類,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • react進(jìn)階教程之異常處理機(jī)制error?Boundaries

    react進(jìn)階教程之異常處理機(jī)制error?Boundaries

    在react中一旦出錯,如果每個組件去處理出錯情況則比較麻煩,下面這篇文章主要給大家介紹了關(guān)于react進(jìn)階教程之異常處理機(jī)制error?Boundaries的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • react 項目中引入圖片的幾種方式

    react 項目中引入圖片的幾種方式

    本文主要介紹了react 項目中引入圖片,本文詳細(xì)的介紹了幾種方法,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-06-06
  • React組件中的this的具體使用

    React組件中的this的具體使用

    這篇文章主要介紹了React組件中的this的具體使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • React 組件中的 bind(this)示例代碼

    React 組件中的 bind(this)示例代碼

    這篇文章主要介紹了 React 組件中的 bind(this) ,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-09-09
  • react國際化化插件react-i18n-auto使用詳解

    react國際化化插件react-i18n-auto使用詳解

    這篇文章主要介紹了react國際化化插件react-i18n-auto使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • react中的axios模塊你了解嗎

    react中的axios模塊你了解嗎

    這篇文章主要為大家詳細(xì)介紹了react中的axios模塊,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • 詳解React中setState回調(diào)函數(shù)

    詳解React中setState回調(diào)函數(shù)

    這篇文章主要介紹了詳解React中setState回調(diào)函數(shù),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • 記錄React使用connect后,ref.current為null問題及解決

    記錄React使用connect后,ref.current為null問題及解決

    記錄React使用connect后,ref.current為null問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • ReactNative-JS 調(diào)用原生方法實例代碼

    ReactNative-JS 調(diào)用原生方法實例代碼

    這篇文章主要介紹了ReactNative-JS 調(diào)用原生方法實例代碼的相關(guān)資料,需要的朋友可以參考下
    2016-10-10

最新評論