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

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

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

一、安裝

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

例如:

寫一個(gè)帶有副作用的action:

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

如果沒有使用redux-thunk會(huì)直接報(bào)錯(cuò)顯示action必須是一個(gè)平面對(duì)象

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中間件一般放在第一個(gè),因?yàn)樗诮邮誥ction時(shí)如果發(fā)現(xiàn)action不是一個(gè)平面對(duì)象

那么它就不會(huì)傳遞給下一個(gè)中間件

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

如果action是一個(gè)平面對(duì)象它才會(huì)往后傳遞

五、redux-thunk原理

redux-thunk會(huì)返回給action3個(gè)參數(shù)

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

源碼:

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

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

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

export default thunk;

總結(jié)

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

相關(guān)文章

  • React Native AsyncStorage本地存儲(chǔ)工具類

    React Native AsyncStorage本地存儲(chǔ)工具類

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

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

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

    react 項(xiàng)目中引入圖片的幾種方式

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

    React組件中的this的具體使用

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

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

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

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

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

    react中的axios模塊你了解嗎

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

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

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

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

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

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

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

最新評(píng)論