fish redux 个人理解
fish redux 理解
fish redux是什么
Fish Redux 是一个基于 Redux 数据管理的组装式 flutter 应用框架, 它特别适用于构建中大型的复杂应用。
它的特点是配置式组装。 一方面我们将一个大的页面,对视图和数据层层拆解为互相独立的 Component|Adapter,上层负责组装,下层负责实现; 另一方面将 Component|Adapter 拆分为 View,Reducer,Effect 等相互独立的上下文无关函数。
所以它会非常干净,易维护,易协作。
Fish Redux 的灵感主要来自于 Redux, Elm, Dva 这样的优秀框架。而 Fish Redux 站在巨人的肩膀上,将集中,分治,复用,隔离做的更进一步。
fish redux 干什么用的
fish redux 用作flutter项目中的状态管理,在我看来,它可以作为组织Flutter页面的利器。就目前flutter页面 如果把每一个widget都放到一个dart文件中,在阅读源码以及后续的维护上都是非常困难的一件事,使用fish redux就可以打破这种局面,页面中每个Component 都单独出来,清爽了许多。
fish redux 怎么用
理解fish redux的组成
模块名称 作用 store 根据继承关系而来的状态树 state 保存页面状态(例如 主题色) Action 动作(例如添加) Effect/Reducer 处理Action(根据不同的action,修改与action相对应的state)返回新state时fish redux层层通知修改页面状态 两者的区别: 举个例子: Effect处理类似 页面初始化的时候对state 数据做的一些修改 或者 异步请求这些东西
>Reducer 处理类似 单击页面中某按钮,修改主题色这样的动作view 绘制页面 Adapter 适配器【主要用于页面中包含 Lisview,适配ListView中每一项,比较特殊】 Connector 连接 【描述了主页面的state与页面中的Component的关系】,从page state中存取与之关联的Component的状态。 Component 页面小部件,组成page的一部分 page 对以上内容的组装描述
2.解读fish redux github上提供的示例,地址:https://github.com/alibaba/fish-redux/tree/master/example

看图理解 :上图是example的一个项目结构图,立体的画出来理解起来更容易一点
global store,里边保存了 根状态 ,这个根状态目前只有主题颜色 ,state树 store
一个 修改主题的action 一个执行修改主题的Reducer
list页面继承了根state, 同时有自己的状态 toDos【ListView中的数据】,数据展示流程是,在effect中执行页面初始化
Lifecycle.initState 初始化数据A,通过执行动作initToDosAction,传递数据A修改state中的todos 返回新状态【更新状态≈更新页面视图】, 紧接着页面加载的时候state中的toDos不为空加载出来想要展示的数据
进入page.dart dependencies里边有两项比较重要,第一个是adapter 适配器,我的理解中这个就是为listview而生的,通过指定conn 和和与之对应的的Adapter,声明一个连接了生成ListItem的companent和连接,conn就是pagestate与ListItem的关系,示例中的是: NoneConn() + ToDoListAdapter(), 在ToDoListAdapter中指定了 ToDoComponent【ListItem】的companent,并且制定了两者之间的connect ,从page的 state.toDos里边取小数据List,把小数据写入到“大”数据... 这个比较特殊 是专门处理listview的
另外一个是slots ,这里是一个connect加一个component这个好理解一点,就是通过connect连接pagestate和component,connector中声明了外层page与component中state的关系 ,目前最多支持6个参数,这里的参数可以自定义,所以6个足够用了,不够用就把某个改成类...
想要从根节点修改:
例如修改主题:
GlobalStore.store.dispatch(GlobalActionCreator.onchangeThemeColor());
fish redux 个人理解的更多相关文章
- 即将开源 | 2亿用户背后的Flutter应用框架Fish Redux
背景 在闲鱼深度使用 Flutter 开发过程中,我们遇到了业务代码耦合严重,代码可维护性糟糕,如入泥泞.对于闲鱼这样的负责业务场景,我们需要一个统一的应用框架来摆脱当下的开发困境,而这也是 Flut ...
- redux的理解
Redux 这里介绍下我对Redux的理解,不涉及如何使用Redux. Redux 官网介绍: A predictable state container for JavaScript apps.(一 ...
- redux深入理解之中间件(middleware)
理解reduce函数 reduce() 方法接收一个函数作为累加器(accumulator),数组中的每个值(从左到右)开始缩减,最终为一个值. arr.reduce([callback, initi ...
- 对于Redux的理解
在移动端项目,经常会在不同view中进行传递数据,事件.当事件比较少时,我们可以通过常规的事件流方法,注册,发布事件 进行响应等等.但是项目中一个事件多处响应时候,就会使程序变得相当复杂.在现在的Vu ...
- 对redux的理解
redux原理 某公司有物流(actionType).电商(actionType).广告(actionType)3块业务,在公司财务系统(state)统一记录着三块业务分别赚取到的资金.某天,电商业 ...
- redux 初步理解
派发一个 action 给 reducer, reducer 生成了一个新的 state; redux 通过 Store 来保存数据, store.getState 获得数据, 而要更新 state, ...
- Redux 和 Redux thunk 理解
1: state 就像 model { todos: [{ text: 'Eat food', completed: true }, { text: 'Exercise', completed: fa ...
- Redux简易理解
1. createStore(相当于vuex的$store) 这才是数据存储仓库,用来存储初和输出的数据,更vuex$store功能一样 作用: 创建一个 Redux store 来以存放应用中所有 ...
- Redux 架构理解
Redux 是一种前端“架构模式”,是 Flux 架构的一种变种,用来提供可预测的状态管理.虽然经常和 React 一起被提及,但是 Redux 却不仅仅只能用于 React,还可以将其运用到其他前端 ...
随机推荐
- git常用操作方法
在实际开发,测试中,会使用git作为版本控制工具来完成团队协作.因此,对基本的git操作指令进行总结是十分有必要的,本文对一些术语或者理论基础,不重新码字,可以参考廖雪峰老师的博文,本文只对命令做归纳 ...
- @Transactional注解不生效的原因总结(整理网上和自己遇到的解决方案)
1.问题背景 今天做项目,发现配置好@Transactional后,没有生效,事务没有回滚,即便在网上查资料,也没有解决,好像网上没有人发过我遇见的这种情况的帖子. 2.自己遇到的情况分析 代码结构图 ...
- 从 10.x 到 ArcGIS Pro 的 Python 迁移
与 ArcGIS Pro 结合使用 Python 的方式与包括 ArcGIS Desktop.ArcGIS Server 以及 ArcGIS Engine 在内的其他 ArcGIS 产品不同. 地理处 ...
- VS Code文本编辑快捷操作(2)
1. 光标移动 移动光标最常用的就是方向键,但是方向键每次只能把光标移动一个位置,可以说是一种相对低效的方式.下面介绍针对单词.行.代码块.整个文档等多种光标移动方式. 1.1 ...
- JDBC的异常处理方式
A: try...catch(...) {...} finally {} B: 关闭ResultSet,Statement , Connection import java.sql.Connectio ...
- JAVA 基础编程练习题47 【程序 47 打印星号】
47 [程序 47 打印星号] 题目:读取 7 个数(1—50)的整数值,每读取一个值,程序打印出该值个数的*. package cskaoyan; public class cskaoyan47 { ...
- JAVA 基础编程练习题22 【程序 22 递归求阶乘】
22 [程序 22 递归求阶乘] 题目:利用递归方法求 5!. 程序分析:递归公式:fn=fn_1*4! package cskaoyan; public class cskaoyan22 { @or ...
- JAVA 基础编程练习题21 【程序 21 求阶乘】
21 [程序 21 求阶乘] 题目:求 1+2!+3!+...+20!的和 程序分析:此程序只是把累加变成了累乘. package cskaoyan; public class cskaoyan21 ...
- Mysql使用Java UUID作为唯一值时使用前缀索引测试
Mysql可以使用字符串前缀 作为索引 以节约空间. 下面我们以 Java的UUID 生成的 32位(移除UUID中的 中划线)字符串 来做一下 测试. 表结构: CREATE TABLE `test ...
- 字典和Model的互转
LHModel的简单使用: LHModel是一个JSON转model,model转JSON的工具类. 使用很多runtime的API.调用简单,真正能用到的只有两个方法. Model* model = ...