博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
架构设计知识梳理(2) Flux
阅读量:6268 次
发布时间:2019-06-22

本文共 1758 字,大约阅读时间需要 5 分钟。

一、概述

Flux的特点:

  • 数据是单向的
  • App被分为三个部分 ViewApp界面,它根据用户交互创造相应的响应ActionDispatcher:处理中心,接收各种Action并路由到对应的StoreStore:维护App各个模块的数据状态,他们会根据当前的动作Action处理不同的业务状态,会产生一个change事件来通知View更新状态。
  • Action是一个简单的Java对象,包含typedata

二、Action

TypeString类型标示事件类型。 DataMap类型,携带这个动作需要的数据。

Bundler data = new Bundle();data.put("USER_ID", id);Action action = new ViewAction("SHOW_USER", data);复制代码

三、Store

Store模块包含了App状态和业务逻辑,它能管理各种对象的状态而不是一个。 Store必须暴露一个接口来获取App状态,这样View模块就可以访问Store模块来更新UI

Store的职责不是用来从外部获取数据,而是用来跟踪通过
Action获取的数据。

四、网络请求和异步回调

异步网络请求是通过Action Creator触发的,API Adapter模块负责请求API并返回结果,最后Action Creator会把相应的Action和数据发送出去。 Store完全是同步模型,这样使Store的内部逻辑更简单。 所有的Action都是通过Action Creator触发的,把所有的Action都集中在一个地方,容易排查bug

五、Todo App源码

1.1 actions/Action:一个Action对应一个事件,并且包含了该事件相关联的数据。 1.2 actions/ActionCreator:这是一个单例模式,他构造时需要传入一个Dispatcher对象,封装一些方法,并通过Dispatcher分发出去。

public static ActionCreator get(Dispatcher dispatcher) { //ActionCreator和Dispatcher类似,都是单例模式。    if (instance == null) {        instance = new ActionCreator(dispatcher);    }    return instance;}public void create(String text) {    dispatcher.dispatch(TodoActions.TODO_CREATE, TodoActions.KET_TEXT, text);}复制代码

1.3 actions/TodoActions:封装Action相关的常量。

dispatcher/Dispatcher:这也是一个单例模式,他构造时需要传入一个Bus对象,它提供了registerunRegister,并通过bus发送出去。

//构造时和Bus相关联。public static Dispatcher get(Bus bus) {    if (instance == null) {        instance = new Dispatcher(bus);     }     return instance;}复制代码

model/Todo:表示一个事件。 stores/Store:它是一个接口,同样和Dispatcher相关联,他的子类是TodoStore。 整个数据流的流程是:

Activity发起事件 -> ActionCreator#xxx -> Dispatcher#dispatch -> Bus#post -> TodoStore#onAction -> TodoStore#emitChange -> Bus#post -> Activity#onTodoStoreChange复制代码

Activity接收数据的流程

Activity#onTodoStoreChange -> updateUi -> TodoStore#getTodos()复制代码

转载地址:http://egppa.baihongyu.com/

你可能感兴趣的文章
返回一个整数数组中最大子数组的和
查看>>
leetcode(二)
查看>>
利用css实现居中的方法
查看>>
Spring + Hibernate 框架
查看>>
添加浏览器的用户样式表
查看>>
LigerUI学习笔记之布局篇 layout
查看>>
LeetCode题解(二)
查看>>
Mybatis通用Mapper
查看>>
文件磁盘命令(就该这么学6章内容)
查看>>
2016-207-19 随笔
查看>>
java的double类型如何精确到一位小数?
查看>>
看看国外的javascript题目,你能全部做对吗?
查看>>
ffmpeg 如何选择具有相同AVCodecID的编解码器 (AVCodec)
查看>>
真正解决 Windows 中 Chromium “缺少 Google API 密钥” 的问题
查看>>
Spring 之 AOP
查看>>
软件项目管理|期末复习(二)
查看>>
直接调用VS.net2005中的配置界面
查看>>
程序员的自我修养五Windows PE/COFF
查看>>
关于字符集,编码格式,大小端的简单总结
查看>>
js string 转 int Number()
查看>>