React Flux 思想

一、什么是flux

flux 是 react 中的类似于 vuex 的公共状态管理方案,利用数据的单向流动的形式对公共状态进行管理。

二、flux的组成

Flux是由3个部分组成:Dispatcher,Store和View。

1、View: 视图层,负责显示用户界面

2、Action(动作):视图层发出的指令,驱动Dispatcher 的javaScript对象

3、Dispatcher(派发器):用来接收Actions、执行回调函数,要求 Store 进行相应的更新。

4、Store(数据层):存储数据和处理数据相关的逻辑,一旦发生变动,就提醒Views更新页面

三、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

实际上Action是一个对象,用来描述 一个行为,里面包含了相关的信息.Action对象包含2个部分:

  • type (类型) 一般是字符串常量,用来标记这个动作
  • payload (载荷) 一般是动作的数据

组件中:

// 步骤1 事件的回调函数
handler(){
    // action是一个描述,定义一个独特的常量,用来描述你的数据更改的方式。
    let action = {
        type:"NUM_ADD"
    };
    dispatcher.dispatch(action)
}

3. dispatcher 通过 dispatcher.register 注册事件,再通过Action传入的类型来触发对应的 Store 回调进行更新

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;

Dispatcher是Flux中的黑心概念,它是一个调度中心,管理着所有的数据流,所有的事件通过它来分发。Dispatcher处理Action(动作)的分发,维护Store之间的依赖关系。负责处理View和Store之间建立Action的传递。

4. Store 里进行相应的数据更新,并触发 View 层事件使试图也同步更新

事件订阅对象的封装:Observer事件机制封装

Store在Flux中的特性是:管理所有的应用数据,只对外暴露getter方法。用于获取Store的数据.而没有暴露setter方法,说明不能通过Store修改数据,如果要修改,必须通过Action动作去触发Dispatcher实现。

只要Store发生变更,它就会使用emit()方法通知View更新并展示新的状态数据。

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;

**Store包含应用状态和逻辑,**不同的Store管理不同的应用状态。Store负责保存数据和定义修改数据的逻辑。同时调用Dispatcher的register()方法。将自己设为监听器,每当发起一个动作(Action),去触发Dispatcher,Store的监听器就会被调用用于执行是否更新数据的操作。若更新,那么View中的状态也会获取最新状态并更新。

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的缺点

  1. 频繁的引入 store
  2. UI组件和容器组件的拆分过于复杂
  3. 无法对多个store进行管理
  4. 每个需更新视图的组件都需要进行更新函数的绑定
  5. … …
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React Flux和Redux是两种常用的JavaScript框架,用于构建更简洁、可维护的前端应用程序。 React Flux是Facebook在2014年首次引入的一种架构模式,它通过单向的数据流来管理应用程序的状态。在React Flux中,数据流沿着特定的路径从"action"(用户交互或其他触发事件)开始,经过"dispatcher"(分发器)传递给"stores"(状态和逻辑的存储器),然后通过"views"(视图组件)展示给用户。这种单向数据流的架构使得应用程序的状态更加可控和可预测,容易调试和维护。 Redux是一种基于Flux的架构模式,它将数据流的思想推向了极致。Redux通过一个单一的"store"(存储器)来管理整个应用程序的状态,并通过纯函数的方式来处理状态的变化。Redux的核心概念是"action"(动作)和"reducer"(处理器)。当用户触发某些操作时,会产生一个action对象,这个对象描述了操作的类型和相关的数据。然后,通过reducer函数对这个action进行处理,生成一个新的状态并返回给store。通过这种方式,Redux实现了可预测性、可测试性和易于调试的特点。 与React Flux相比,Redux的设计更加简单和灵活,可以轻松应对大型应用程序的状态管理。Redux还引入了中间件的概念,用于处理异步操作和复杂的业务逻辑。但是,Redux的简洁也带来了额外的学习成本,对于初学者来说可能需要一定的时间来理解和掌握。 综上所述,React Flux和Redux都是帮助开发者更好地管理状态的框架,各有其特点和适用场景。开发者可以根据项目的需求和自身的经验选择使用其中一种或者结合两者来构建高效的前端应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值