亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Flux架構(gòu)小白入門筆記

lily_wang / 2268人閱讀

摘要:架構(gòu)小白入門筆記是提出的一種處理前端數(shù)據(jù)的架構(gòu),學(xué)習(xí)就是學(xué)習(xí)它的思想。這個(gè)筆記是我在學(xué)習(xí)了阮一峰老師的架構(gòu)入門教程之后得出,里面的例子和部分原文來自于其不同在于我用將其改寫了,并加入了注釋。

Flux架構(gòu)小白入門筆記

Flux是facebook提出的一種處理前端數(shù)據(jù)的架構(gòu),學(xué)習(xí)Flux就是學(xué)習(xí)它的思想。

這個(gè)筆記是我在學(xué)習(xí)了阮一峰老師的Flux 架構(gòu)入門教程之后得出,
里面的例子和部分原文來自于其,不同在于我用es6將其改寫了,并加入了注釋。

做了兩三個(gè)前端外包項(xiàng)目,都是后端提供數(shù)據(jù)接口,邏輯主要由前端完成,深感前端邏輯之復(fù)雜,
特別是最近的一個(gè)項(xiàng)目,到后期業(yè)務(wù)邏輯代碼混在一起根本無法維護(hù)。于是痛定思痛,想下定決心研究下前端架構(gòu)方案,
而Flux則是現(xiàn)在最火,最受好評的前端架構(gòu)方案。

本例代碼倉庫:flux_learn,喜歡的話給個(gè)star哦!

我們按Flux數(shù)據(jù)流的順序來分析,

View發(fā)起Action->Action傳遞到Dispatcher->Dispatcher將通知Store->Store的狀態(tài)改變通知View進(jìn)行改變

View由React組件構(gòu)成,首先是MyButton.js

import React, {Component} from "react"

class MyButton extends Component {

    render() {
        let items = this.props.items;
        return (
            
    {items.map((result, key) => { return (
    {result}
    ) })}
) } } export default MyButton

額,這個(gè)組件貌似沒啥好講的,會(huì)React和es6的一下就能看懂。。。

接下來是由對MyButton進(jìn)行封裝的MyButtonController.js

import React, {Component} from "react"
import MyButton from "app/components/MyButton"
import listStore from "app/stores/listStore"
import ButtonActions from "app/actions/ButtonActions"

//對Action發(fā)生器進(jìn)行初始化,buttonActions能發(fā)出不同類型action給Dispatcher
let buttonActions = new ButtonActions()

class MyButtonController extends Component {

    constructor(props) {
        //把props作為參數(shù)傳遞到super(),這樣在constructor里即可訪問this.props屬性
        super(props)
        this.state = {
            items: []
        }
    }

    componentDidMount() {
        //在組件掛載后綁定組件的私有方法_onChange到Store,之后listStore狀態(tài)變化即可通知組件調(diào)用_onChange方法進(jìn)行改變
        listStore.addChangeListener(this._onChange.bind(this))
    }

    componentWillUnmount() {
        //在組件移除后解除綁定組件的私有方法_onChange到Store
        listStore.removeChangeListener(this._onChange.bind(this))
    }

    //組件響應(yīng)Store變化的回調(diào)函數(shù)
    _onChange() {
        this.setState({
            items: listStore.getAll()
        })
    }

    render() {
        return (
            
        )
    }

    createNewItem() {
        //調(diào)用Action發(fā)生器發(fā)出增加Item的Action
        buttonActions.addNewItem("new item")
    }
}

export default MyButtonController

在我們點(diǎn)擊新增按鈕后調(diào)用createNewItem方法發(fā)出一個(gè)"ADD_NEW_ITEM"的Action到Dispatcher

接下來我們看看ButtonActions.js

import AppDispatcher from "app/dispatcher/AppDispatcher"

class ButtonActions {

    //發(fā)送ADD_NEW_ITEM的Action的方法
    addNewItem(text) {
        //調(diào)用Dispatcher獲取actionType為ADD_NEW_ITEM的Action
        AppDispatcher.dispatch({
            actionType: "ADD_NEW_ITEM",
            text: text
        })
    }
}

export default ButtonActions

這里的addNewItem方法發(fā)起了一個(gè)actionType為ADD_NEW_ITEM的Action到Dispatcher

然后我們再看AppDispatcher.js

import flux from "flux"
import listStore from "app/stores/listStore"

//拿到flux模塊里的Dispatcher類
let Dispatcher = flux.Dispatcher;
//用Dispatcher類new一個(gè)AppDispatcher對象
let AppDispatcher = new Dispatcher();

//調(diào)用register方法注冊接收到各種actionType的Action之后的回調(diào)函數(shù)
AppDispatcher.register(function (action) {
    switch (action.actionType) {
        case "ADD_NEW_ITEM":
            listStore.addNewItemHandler(action.text)
            listStore.emitChange()
            break;
        default:
    }
})

export default AppDispatcher

最后是ListStore.js

import EventEmitter from "events"

class ListStore extends EventEmitter {

    constructor() {
        super()
        //初始化數(shù)據(jù)
        this.items = []
    }
    
    //返回所有數(shù)據(jù)的方法
    getAll() {
        return this.items
    }

    //增加數(shù)據(jù)的處理函數(shù)
    addNewItemHandler(text) {
        this.items.push(text)
    }

    //提交變化
    emitChange() {
        this.emit("change")
    }

    //監(jiān)聽函數(shù),當(dāng)有變化時(shí)調(diào)用注冊的回調(diào)方法
    addChangeListener(callback) {
        this.on("change", callback)
    }

    //remore監(jiān)聽函數(shù)
    removeChangeListener(callback) {
        this.removeListener("change", callback)
    }
}

//new一個(gè)listStore作為單例暴露給其它模塊使用
let listStore = new ListStore()

export default listStore

它負(fù)責(zé)記錄數(shù)據(jù)和狀態(tài)并在有變化時(shí)改變View

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/91203.html

相關(guān)文章

  • React學(xué)習(xí)筆記 - 對Flux的理解

    摘要:學(xué)習(xí)是一個(gè)漸進(jìn)和修正的過程。學(xué)習(xí)在一定程度上是一個(gè)試錯(cuò)的過程。唯有有了一個(gè)理解,才能檢驗(yàn)對錯(cuò)。對的理解上有句話是說,編程無外乎兩件事,組合和抽象。處理這些變化的責(zé)任由和共同完成。具體來說,是針對一類數(shù)據(jù)進(jìn)行操作,比如評論。 本文僅僅是對Flux的個(gè)人理解,做交流之用,如果錯(cuò)誤,還望大家指出! 剛才用了1個(gè)多小時(shí),看了一下Flux,想說一下自己的理解??赡艽蠹視?huì)覺得,只花了這么少的時(shí)間,...

    yanest 評論0 收藏0
  • 小白程序員一路晉升為大廠高級技術(shù)專家我看過哪些書籍?(建議收藏)

    摘要:大家好,我是冰河有句話叫做投資啥都不如投資自己的回報(bào)率高。馬上就十一國慶假期了,給小伙伴們分享下,從小白程序員到大廠高級技術(shù)專家我看過哪些技術(shù)類書籍。 大家好,我是...

    sf_wangchong 評論0 收藏0
  • Flux 應(yīng)用架構(gòu)

    摘要:應(yīng)用架構(gòu)是用來構(gòu)建客戶端應(yīng)用的一種應(yīng)用架構(gòu)體系。它是一種類似的架構(gòu),但是它更加簡單清晰,是一種單向數(shù)據(jù)流的架構(gòu)設(shè)計(jì)。將數(shù)據(jù)和動(dòng)作類型傳遞給去分發(fā)數(shù)據(jù)流是一個(gè)包含所有動(dòng)作類型的常量對象一個(gè)分發(fā)中心,它管理著應(yīng)用的所有數(shù)據(jù)流向。 Flux 應(yīng)用架構(gòu) Flux是Facebook用來構(gòu)建客戶端Web應(yīng)用的一種應(yīng)用架構(gòu)體系。它是一種類似MVC的架構(gòu),但是它更加簡單、清晰,是一種單向數(shù)據(jù)流的架構(gòu)設(shè)...

    Jonathan Shieber 評論0 收藏0
  • Flux 應(yīng)用架構(gòu)

    摘要:應(yīng)用架構(gòu)是用來構(gòu)建客戶端應(yīng)用的一種應(yīng)用架構(gòu)體系。它是一種類似的架構(gòu),但是它更加簡單清晰,是一種單向數(shù)據(jù)流的架構(gòu)設(shè)計(jì)。將數(shù)據(jù)和動(dòng)作類型傳遞給去分發(fā)數(shù)據(jù)流是一個(gè)包含所有動(dòng)作類型的常量對象一個(gè)分發(fā)中心,它管理著應(yīng)用的所有數(shù)據(jù)流向。 Flux 應(yīng)用架構(gòu) Flux是Facebook用來構(gòu)建客戶端Web應(yīng)用的一種應(yīng)用架構(gòu)體系。它是一種類似MVC的架構(gòu),但是它更加簡單、清晰,是一種單向數(shù)據(jù)流的架構(gòu)設(shè)...

    songjz 評論0 收藏0
  • [譯]Flux入門

    摘要:正式入坑我將按順序解釋概念,并且一個(gè)一個(gè)地構(gòu)建它們。視圖的和調(diào)度員本質(zhì)上是一個(gè)加入了額外規(guī)則的事件系統(tǒng)。它來廣播事件并注冊回調(diào)。這描述了我們的,我們稱之為。然后,會(huì)響應(yīng)已分派的操作這是處理調(diào)度回調(diào)的傳統(tǒng)方式。 原文地址:https://blog.andrewray.me/flu... ,作者:Andrew Ray TL;DR 當(dāng)我在努力學(xué)習(xí)Flux時(shí),我希望有人告訴我:它并不簡單,也沒...

    Ashin 評論0 收藏0

發(fā)表評論

0條評論

lily_wang

|高級講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<