React_被抛弃的的flux

2020-05-07  本文已影响0人  learninginto

React_被抛弃的的flux

Flux 架构的单向闭环数据流,虽然写起来还是有些繁琐和复杂性,但是更有助于我们理解这种数据模式。

flex.png

常规的数据流程:View => Action动作 => Dispatcher派发器 => Store数据层 => View

  1. 通过Dispatcher中的dispatch,将action派发给Dispatcher。

  2. Dispatcher通过register接收action,经过逻辑判断,根据action的类型调用store中修改数据的方法。

  3. 而因为将observer与store通过Object.assign进行了合并,可以通过观察者模式,触发绑定在组件上的更新函数subscribe。

cnpm install flux -S

案例

import React, { Component } from 'react';
import One from "./components/one"
import Two from "./components/two"

export default class App extends Component {
 
  render() {
    return (
      <div>
        <One></One>
        <Two></Two>
      </div>
    )
  }
}
import React, { Component } from 'react'
import store from "../store/index"
import dispatcher from "../store/dispatcher"

class one extends Component {
    constructor() {
        super();
        this.state = store.getState();
        store.subscribe(this.handleUpdate.bind(this))
    }
    render() {
        return (
            <div>
                <h2>one组件:{this.state.n}</h2>
                <button onClick={this.handleClick.bind(this)}>One组件点击</button>
            </div>
        )
    }
    handleClick() {
        var action = {
            type: "NUM_ADD"
        }
        dispatcher.dispatch(action)
    }
    // 做组件的状态更新
    handleUpdate() {
        this.setState(store.getState());
    }
}

export default one;
import { Dispatcher } from "flux"
import store from "./index"
const dispatcher = new Dispatcher();

// dispacher接收action
dispatcher.register((action)=>{
    switch(action.type){
        case "NUM_ADD":
            store.handleNumAdd();    
        break;
        case "NUM_REDUCE":break;
    }
})

export default dispatcher;
import observer from "../observer"
// 公共的内存空间
var store = Object.assign(observer, {
    state: {
        n: 10
    },
    getState() {
        return this.state;
    },
    handleNumAdd() {
        this.state.n++;
        // 通过观察者模式更新视图
        this.$emit("update")
    },
    // 绑定组件更新的函数,
    subscribe(callback) {
        this.$on("update", callback)
    }
})
export default store;
  1. 频繁的引入store
  2. UI组件和容器组件的拆分过于复杂
  3. 无法对多个store进行管理
  4. 需要每次都进行视图更新函数的绑定

而因为Redux的出现, flux的缺点被逐一解决 ~

上一篇下一篇

猜你喜欢

热点阅读