美文网首页
React_被抛弃的的flux

React_被抛弃的的flux

作者: learninginto | 来源:发表于2020-05-07 23:47 被阅读0次

React_被抛弃的的flux

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

flex.png

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

  • Dispatcher:事件调度的中心,flux模型的中心枢纽,相当于MVC模式中的Controller层。它本质上是Store的回调注册。每个Store注册它自己并提供一个回调函数。当Dispatcher响应Action时,通过已注册的回调函数,将Action提供的数据负载发送给应用中的所有Store。
  • Action:是一个动作,用来描述对数据的操作。
  1. 通过Dispatcher中的dispatch,将action派发给Dispatcher。

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

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

  • 安装
cnpm install flux -S

案例

  • 在App.js中引入了两个组件
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>
    )
  }
}
  • one组件,从视图中调用handleClick触发action动作,对象中的属性名约定俗成为type
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;
  • store/dispatcher.js事件处理中心,通过dispatcher中的register接收action动作
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;
  • 在store/index.js中定义了公共的存储空间,并绑定组件更新的函数,调用回调函数,触发one组件中的this.setState更新
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;
  • flux的缺点:
  1. 频繁的引入store
  2. UI组件和容器组件的拆分过于复杂
  3. 无法对多个store进行管理
  4. 需要每次都进行视图更新函数的绑定

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

相关文章

  • React_被抛弃的的flux

    React_被抛弃的的flux Flux 架构的单向闭环数据流,虽然写起来还是有些繁琐和复杂性,但是更有助于我们理...

  • 最强React精讲教程+源码,资源地址⬇️

    React_模块化,组件化介绍.avi React_hello React.avi React_虚拟DOM对象, ...

  • Flux框架

    Flux用来解决React在结构上的问题,从Flux也衍生了Redux,Flux也类似MVC这一类的架构,Flux...

  • 抛弃你的“被抛弃感”

    ​ 国内知名的精神分析领域专家曾奇峰说,这个世界上所有的爱都是为了在一起,比如说男女之爱,是为了能够长相厮守,但是...

  • 弃儿

    从出生开始 就被抛弃的我 一直在被抛弃 被家庭抛弃 被爱人抛弃 被社会抛弃 被自己抛弃 我能怎么办 要么抛弃全世界...

  • React_新手入门

    React_轻松安装 (跟着小陈,带你玩转React) (热门的三大框架:Angular、React、Vue ) ...

  • React Native Flux框架的使用

    React Native Flux框架的使用 Flux是RN比较常用的框架,用起来相对比较简单和方便。Flux实现...

  • Android开发之Flux架构

    Android开发之Flux架构 什么是Flux? Flux是一种软件开发架构,开发流程遵循Restful的点对点...

  • 被抛弃的孩子

    还给丽娜报考好的学校,丽娜和曾经的妹妹夏娜,在同一个,学校上学,夏娜经常欺负丽娜,他其实不知道丽娜是她的姐...

  • 被抛弃的孩子

    从前有一个妈妈,叫兰斯,她生了两个女孩,大女儿叫夏格,小女儿叫夏娜小女儿是异瞳,异瞳非常稀有,所以他只对小...

网友评论

      本文标题:React_被抛弃的的flux

      本文链接:https://www.haomeiwen.com/subject/ncbtnhtx.html