中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

react中flux是什么意思

發布時間:2021-11-25 13:17:32 來源:億速云 閱讀:226 作者:柒染 欄目:web開發

react中flux是什么意思,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

在react中,flux是一個公共狀態管理方案,是用來構建客戶端Web應用的應用架構,利用數據的單向流動的形式對公共狀態進行管理。

本教程操作環境:Windows7系統、react17.0.1版、Dell G3電腦。

什么是flux

flux 是 react 中的類似于 vuex 的公共狀態管理方案,它是 Facebook 官方給出的用來構建客戶端Web應用的應用架構,利用數據的單向流動的形式對公共狀態進行管理。

它更像一個模式而不是一個正式的框架,開發者不需要太多的新代碼就可以快速的上手Flux。

使用 cnpm i flux -S 的方式進行安裝。

flux的組成

  • View:視圖層

  • Action:視圖發出的消息

  • Dispatcher:派發者,用來接收Action,執行回調函數

  • Store:數據層,存放狀態,一旦發生改動,

flux的工作流程

react中flux是什么意思
flux的工作流程

flux 在進行數據更新時,會經歷以下幾步:

  1. 用戶與 View 層交互,觸發 Action

  2. Action 使用 dispatcher.dispatch 將Action自己的狀態發送給dispatcher

  3. dispatcher 通過register注冊事件,再通過Action傳入的類型來觸發對應的 Store 回調進行更新

  4. Store 里進行相應的數據更新,并觸發 View 層事件使試圖也同步更新

  5. View層 收到信號進行更新

用代碼的形式詳細展開:

1、用戶與 View 層交互,觸發 Action

組件中:

<button onClick = {this.handler.bind(this)}>更新數據</button>

2、Action 使用 dispatcher.dispatch 將Action自己的狀態發送給dispatcher

組件中:

// 步驟1 事件的回調函數
handler(){
    // action是一個描述,定義一個獨特的常量,用來描述你的數據更改的方式。
    let action = {
        type:"NUM_ADD"
    };
    dispatcher.dispatch(action)
}

3、dispatcher 通過 dispatcher.register 注冊事件,再通過Action傳入的類型來觸發對應的 Store 回調進行更新

Dispatcher構造函數依賴的flux需要單獨下載:cnpm i flux -S

dispatcher 文件中:

import {Dispatcher} from 'flux'
import store from './index'
const dispatcher = new Dispatcher();

// register方法注冊事件,通過action傳入的類型來觸發對應的 Store 回調進行更新
dispatcher.register((action)=>{
    switch(action.type){
        case "NUM_ADD": 
            /* 調用相應的store里定義好的方法 */
            store.handleAdd();
            break;
        case "Num_REDUCE":
            store.handleReduce()
            break;
    }
})

export default dispatcher;

4、Store 里進行相應的數據更新,并觸發 View 層事件使試圖也同步更新

事件訂閱對象的封裝:Observer事件機制封裝

store文件中:

import observer from '../observer'
let store = Object.assign(observer,{
    state:{
        n:10
    },
    getState(){
        return this.state;
    },

    // store 中的action對應的處理方法,更新store的數據,并觸發更新視圖的方法
    handleAdd(){
        this.state.n ++;
        this.$emit("update")
    },
})


export default store;

5、View層 收到信號進行更新

constructor 里用 $on 做事件訂閱,并定義一個做狀態更新的方法作為回調:

組件中:

// ...

// 在這里進行事件訂閱,以讓視圖得到更新
constructor(){
    super();
    this.state = store.getState();
    store.$on("update",this.handleUpdate.bind(this))
}

// ...

// 事件訂閱的回調,更新視圖方法
handleUpdate(){
    this.setState(store.getState());
}

至此,在第4步中觸發的方法在此執行,數據就得到了更新。一個完整的flux體系更新數據的流程就完成了。

flux的缺點

  • 頻繁的引入 store

  • UI組件和容器組件的拆分過于復雜

  • 無法對多個store進行管理

  • 每個需更新視圖的組件都需要進行更新函數的綁定

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

招远市| 聊城市| 连云港市| 灵寿县| 巴彦县| 吴堡县| 甘肃省| 青神县| 都兰县| 团风县| 平利县| 兴和县| 会同县| 普格县| 神木县| 五家渠市| 太仓市| 福贡县| 越西县| 中江县| 礼泉县| 安溪县| 伊金霍洛旗| 永修县| 东乌珠穆沁旗| 安远县| 海林市| 西藏| 西平县| 潮州市| 平陆县| 黎平县| 宁德市| 雷波县| 城步| 永泰县| 财经| 枣阳市| 观塘区| 杨浦区| 兖州市|