React Flux 工作流程

本文详细介绍了React Flux的工作流程,包括Dispatcher、Action、Store和View四个关键部分。当用户交互触发Action,Dispatcher将Action分发给Store,Store更新数据并触发change事件,View监听到事件后更新UI。这种单向数据流确保了系统的透明性和可预测性。同时,文章通过flux-todomvc实例展示了如何在实际应用中实现Flux架构。
摘要由CSDN通过智能技术生成

React Flux 工作流程

整个流程如下:
首先要有 action,通过定义一些 action creator 方法根据需要创建 Action 提供给 dispatcher
View 层通过用户交互(比如 onClick)会触发 Action
Dispatcher 会分发触发的 Action 给所有注册的 Store 的回调函数
Store 回调函数根据接收的 Action 更新自身数据之后会触发一个 change 事件通知 View 数据更改了
View 会监听这个 change 事件,拿到对应的新数据并调用 setState 更新组件 UI

所有的状态都由 Store 来维护,通过 Action 传递数据,构成了如上所述的单向数据流循环,所以应用中的各部分分工就相当明确,高度解耦了。

这种单向数据流使得整个系统都是透明可预测的。

整个流程图:
在这里插入图片描述

Dispatcher

一个应用只需要一个 dispatcher 作为分发中心,管理所有数据流向,分发动作给 Store,没有太多其他的逻辑(一些 action creator 方法也可以放到这里)。

Dispatcher 分发动作给 Store 注册的回调函数,这和一般的订阅/发布模式不同的地方在于:

回调函数不是订阅到某一个特定的事件/频道,每个动作会分发给所有注册的回调函数
回调函数可以指定在其他回调之后调用
基于 Flux 的架构思路,Dispatcher.js 提供的 API 很简单:

register(function callback): string 注册回调函数,返回一个 token 供在 waitFor() 使用
unregister(string id): void 通过 token 移除回调
waitFor(array ids): void 在指定的回调函数执行之后才执行当前回调。这个方法只能在分发动作的回调函数中使用
dispatch(object payload): void 分发动作 payload 给所有注册回调
isDispatching(): boolean 返回 Dispatcher 当前是否处在分发的状态
dispatcher 只是一个粘合剂,剩余的 Store、View、Action 就需要按具体需求去实现了。

接下来结合 flux-todomvc 这个简单的例子,提取其中的关键部分,看一下实际应用中如何衔接 Flux 整个流程,希望能对 Flux 各个部分有更直观深入的理解。

Action

首先要创建动作,通过定义一些 action creator 方法来创建,这些方法用来暴露给外部调用,通过 dispatch 分发对应的动作,所以 action creator 也称作 dispatcher helper methods 辅助 dipatcher 分发。
下面展示一些 内联代码片

var AppDispatcher = require('../dispatcher/AppDispatcher');
var TodoConstants = require('../constants/TodoConstants');

var TodoActions = {
   
  create: function(text) {
   
    AppDispatcher.dispatch({
   
      actionType: TodoConstants.TODO_CREATE,
      text: text
    });
  },

  updateText: function(id, text) {
   
    AppDispatcher.dispatch({
   
      actionType: TodoConstants.TODO_UPDATE_TEXT,
      id: id,
      text: text
    });
  }</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值