最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Redux thunk中間件及執(zhí)行原理詳細分析

 更新時間:2022年09月29日 09:31:40   作者:柯曉楠  
redux的核心概念其實很簡單:將需要修改的state都存入到store里,發(fā)起一個action用來描述發(fā)生了什么,用reducers描述action如何改變state tree,這篇文章主要介紹了Redux thunk中間件及執(zhí)行原理分析

1、Redux-thunk中間件

第一步 安裝redux-thunk中間件

npm install redux-thunk

第二步 在store中引入thunk組件

import {createStore,applyMiddleware } from 'redux';
import Reducer from './Reducer';
import thunk from 'redux-thunk';
const store = createStore(Reducer,applyMiddleware(thunk));
export default store;

第三步 封裝異步請求方法

在TodoList.js組件中,封裝異步獲取請求的方法:

import React, { Component } from 'react'
import Store from './Store'
import axios from 'axios'
export class TodoList extends Component {
    constructor(props){
        super(props);
        this.state = Store.getState();
        this.handleStoreChange = this.handleStoreChange.bind(this);
        Store.subscribe(this.handleStoreChange);
    }
    //在生命周期函數(shù)中調(diào)用異步方法
    componentDidMount(){
        Store.dispatch(this.getTodoListDatas());
    }
    //異步獲取請求的方法
    getTodoListDatas(){
        return (dispatch)=>{
            axios.get("/data.json")
            .then(resp => {
                const action = {
                    type:'axios_getdata',
                    data:resp.data
                }
                dispatch(action)
            })
        }
    }
    handleStoreChange(){
        this.setState(Store.getState());
    }
    render() {
        return (
            <div>
                <input type='text' value={this.state.inputValue}></input>
                <button>添加</button>
                <hr></hr>
                <ul>
                    {this.state.list.map((item,index)=>{
                        return (
                            <li key={index}>{item}</li>
                        );
                    })}
                </ul>
            </div>
        )
    }
}
export default TodoList

第四步 在reducer中接收action信息

const defaultState = {
    inputValue:'',
    list:[]
}
export default (state = defaultState,action) => {
    if(action.type === 'axios_getdata'){
        const newState = state;
        newState.list = action.data;
        return newState;
    }
    return state
}

2、Redux中間件執(zhí)行原理

redux-thunk這個中間件可以使我們把這樣的異步請求或者說復雜的邏輯可以放到action里面去處理,redux-thunk使redux的一個中間件,為什么叫做中間件

我們說中間件,那么肯定是誰和誰的中間,那么redux的中間件指的是誰和誰的中間呢?

如圖。view在redux中會派發(fā)一個action,action通過store的dispatch方法派發(fā)給store,store接收到action,連同之前到state,一起傳給reducer,reducer返回一個新到數(shù)據(jù)給store,store去改變自己到state。這是redux的一個標準流程,那么我們說redux的中間件指的是誰和誰的之間,大家一定要記住, redux的中間件指的是action和store之間。之前我們說action只能是一個對象,所以action是一個對象直接派發(fā)給了store。 但是現(xiàn)在,當我們使用了redux-thunk之后,action可以是函數(shù)了。

為什么可以是函數(shù)呢,看這張圖。action通過dispatch方法被傳遞給store,那么action和store之間是誰,是不是就是dispatch這個方法, 實際上我們指的中間件指的是什么呢,就是對dispatch方法的一個封裝,或者說是dispatch方法的一個升級,最原始的dispatch方法,他接收到一個對象之后,會把這個對象傳遞給store,這就是view中間件的一個情況。 當我們對dispath做了一個升級之后,比如說我們使用了redux-thunk這個中間件,對dispath做了一個升級,這個時候當你調(diào)用dispatch方法,給dispatch傳遞的參數(shù)是一個對象的話,那么這個dispatch就會把這個對象直接傳給store。跟之前寫一個對象,調(diào)用dispatch傳給store沒有任何的區(qū)別。但是這個時候假設傳給dispatch方法是一個函數(shù)的話,這個時候dispatch方法已經(jīng)升級了。他知道如果你傳遞過來是一個函數(shù)的話,他就不會把這個函數(shù)直接傳遞給store。他會怎么辦呢?

他會讓你這個函數(shù)先執(zhí)行,然后執(zhí)行完了之后,需要調(diào)用store的時候,這個函數(shù)再去調(diào)用store。所以dispatch做了一個事情,他會根據(jù)參數(shù)的不同,執(zhí)行不同的事情,如果你參數(shù)是對象,那我直接傳給store。如果你參數(shù)是函數(shù),那就把這個函數(shù)執(zhí)行結束。所以講到這大家應該知道

redux中間件,他的原理是非常簡單的,他就是對store對dispatch方法做一個升級,之前這個dispatch方法只能接收一個對象,現(xiàn)在升級之后,就可以接收對象,也可以接收函數(shù)了。 當然這里用什么對他進行一個升級呢?用redux-thunk對他進行了升級。當然中間件不只redux-thunk這一個,實際上redux中間件非常多,比如說我們說的redux-log,可以記錄action每次派發(fā)的日志,那他怎么記錄呢?其實也很簡單,每次調(diào)用 action的時候,都會通過dispatch把這個action傳遞給store,那么我可以對dispatch做一個升級,dispatch不僅僅把action傳遞給store,而且在每次傳遞之前呢,還通過console.log,把這個action打印出來。這樣就寫了一個redux-log的中間件。他可以在每次派發(fā)action的時候,把這個action打印在控制臺里面。

最近用的比較火的redux中間件,除了redux-thunk,redux-log這樣的東西,還有一個中間件,叫做redux-saga。他的應用范圍也非常廣,redux-saga也是解決redux中間異步問題的中間件。不同于redux-thunk。redux-thunk是把異步操作放在action里面操作。而redux-saga采用的設計思想是,單獨的把一個異步邏輯拆分出來,放在一個異步文件里面管理,基本上掌握了redux-thunk和redux-saga這兩者的設計思路之后呢,再去做redux里面的異步邏輯,或者說復雜的邏輯,如何去拆分,就比較明白了。

到此這篇關于Redux thunk中間件及執(zhí)行原理詳細分析的文章就介紹到這了,更多相關Redux thunk中間件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • react基于react-slick實現(xiàn)多圖輪播效果

    react基于react-slick實現(xiàn)多圖輪播效果

    React slick是一個使用React構建的輪播組件,下面這篇文章主要給大家介紹了關于react基于react-slick實現(xiàn)多圖輪播效果的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-07-07
  • React中Key屬性作用

    React中Key屬性作用

    react中的key屬性,它是一個特殊的屬性,它是出現(xiàn)不是給開發(fā)者用的,而是給React自己使用,有了key屬性后,就可以與組件建立了一種對應關系,本文主要介紹了React中Key屬性作用,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • React源碼state計算流程和優(yōu)先級實例解析

    React源碼state計算流程和優(yōu)先級實例解析

    這篇文章主要為大家介紹了React源碼state計算流程和優(yōu)先級實例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • React?createRef循環(huán)動態(tài)賦值ref問題

    React?createRef循環(huán)動態(tài)賦值ref問題

    這篇文章主要介紹了React?createRef循環(huán)動態(tài)賦值ref問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • React合成事件原理及實現(xiàn)(React18和React16)

    React合成事件原理及實現(xiàn)(React18和React16)

    本文主要介紹了React合成事件原理及實現(xiàn),包含React18和React16兩種版本,具有一定的參考價值,感興趣的可以了解一下
    2025-02-02
  • react+redux仿微信聊天界面

    react+redux仿微信聊天界面

    這篇文章主要介紹了react+redux仿微信聊天IM實例|react仿微信界面 ,本文圖文并茂給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-06-06
  • 在Create React App中啟用Sass和Less的方法示例

    在Create React App中啟用Sass和Less的方法示例

    這篇文章主要介紹了在Create React App中啟用Sass和Less的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • react裝飾器與高階組件及簡單樣式修改的操作詳解

    react裝飾器與高階組件及簡單樣式修改的操作詳解

    這篇文章主要介紹了react裝飾器與高階組件及簡單樣式修改的操作,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2022-09-09
  • 搭建React?Native熱更新平臺的詳細過程

    搭建React?Native熱更新平臺的詳細過程

    這篇文章主要介紹了搭建React?Native熱更新平臺,要實現(xiàn)?React?Native?熱更新功能,有四種思路?Code?Push、Pushy、Expo?和自研,感興趣的朋友一起通過本文學習吧
    2022-05-05
  • React中Refs的使用場景及核心要點詳解

    React中Refs的使用場景及核心要點詳解

    在使用?React?進行開發(fā)過程中,或多或少使用過?Refs?進行?DOM?操作,這篇文章主要介紹了?Refs?功能和使用場景以及注意事項,希望對大家有所幫助
    2023-07-07

最新評論

方山县| 齐齐哈尔市| 涞源县| 邯郸市| 米泉市| 镇雄县| 柳林县| 榆林市| 西藏| 武清区| 黄大仙区| 兴化市| 治多县| 娱乐| 井研县| 新乡县| 赣榆县| 金川县| 林甸县| 广宗县| 博野县| 平顶山市| 云浮市| 井冈山市| 富平县| 万州区| 安仁县| 庐江县| 美姑县| 西盟| 谢通门县| 田东县| 鹰潭市| 静海县| 邢台市| 廉江市| 当涂县| 旌德县| 宝山区| 峨边| 西和县|