溫馨提示×

溫馨提示×

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

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

react中的flux是什么

發(fā)布時間:2021-11-24 15:07:04 來源:億速云 閱讀:164 作者:iii 欄目:web開發(fā)

本篇內(nèi)容主要講解“react中的flux是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“react中的flux是什么”吧!

react flux是react中的類似于vuex的公共狀態(tài)管理方案,它是Facebook官方給出的應用架構,利用數(shù)據(jù)的單向流動的形式對公共狀態(tài)進行管理。

本文操作環(huán)境:Windows7系統(tǒng)、react17.0.1、Dell G3。

react flux是什么?

React中的Flux

flux 是 react 中的類似于 vuex 的公共狀態(tài)管理方案,它是 Facebook 官方給出的應用架構,利用數(shù)據(jù)的單向流動的形式對公共狀態(tài)進行管理?,F(xiàn)已不推薦使用。但是為了能更好的理解 Redux 方案,還是有必要熟悉 flux 的工作流程滴~

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

flux的組成

  • View:視圖層

  • Action:視圖發(fā)出的消息

  • Dispatcher:派發(fā)者,用來接收Action,執(zhí)行回調函數(shù)

  • Store:數(shù)據(jù)層,存放狀態(tài),一旦發(fā)生改動,

flux的工作流程

react中的flux是什么

flux 在進行數(shù)據(jù)更新時,會經(jīng)歷以下幾步:

  • 用戶與 View 層交互,觸發(fā) Action

  • Action 使用 dispatcher.dispatch 將Action自己的狀態(tài)發(fā)送給dispatcher

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

  • Store 里進行相應的數(shù)據(jù)更新,并觸發(fā) View 層事件使試圖也同步更新

  • View層 收到信號進行更新

用代碼的形式詳細展開:

用戶與 View 層交互,觸發(fā) Action

組件中:

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

Action 使用 dispatcher.dispatch 將Action自己的狀態(tài)發(fā)送給dispatcher

組件中:

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

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

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

dispatcher 文件中:

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

Store 里進行相應的數(shù)據(jù)更新,并觸發(fā) View 層事件使試圖也同步更新

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

store文件中:

import observer from '../observer'
let store = Object.assign(observer,{
    state:{
        n:10
    },
    getState(){
        return this.state;
    },
    // store 中的action對應的處理方法,更新store的數(shù)據(jù),并觸發(fā)更新視圖的方法
    handleAdd(){
        this.state.n ++;
        this.$emit("update")
    },
})
export default store;

View層 收到信號進行更新

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

組件中:

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

至此,在第4步中觸發(fā)的方法在此執(zhí)行,數(shù)據(jù)就得到了更新。一個完整的flux體系更新數(shù)據(jù)的流程就完成了。

flux的缺點

  • 頻繁的引入 store

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

  • 無法對多個store進行管理

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

... ...

所以,現(xiàn)在在工作中已經(jīng)不推薦用flux了。取而代之的是一套相對更完善的解決方案:Redux。

到此,相信大家對“react中的flux是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關內(nèi)容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!

向AI問一下細節(jié)

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

AI