初学Reflux
来源:互联网 发布:软件系统验收规范 编辑:程序博客网 时间:2024/06/03 05:45
这两天学习了Reflux的基础知识,贯彻5w1h的学习方法,加上思维导图有力地辅助,总结如下
首先戳这里:看官网是必须的
1、Reflux是什么
- Reflux 是一个简单的单向数据流应用库,灵感来自于 ReactJS Flux
Flux又是什么
- React 标榜自己是 MVC 里面 V 的部分,那么 Flux 就相当于添加 M 和 C 的部分。Flux 是 Facebook 使用的一套前端应用的架构模式
2、Reflux是谁什么时候提出的
- Facebook在2014年4月提出的
Facebook为什么要提出
- 因为React在设计之初就只关注在View本身上,其余部分如数据的获取,事件处理等,全然不在考虑之内。不过构建大型的Web前端应用,这些点又实在不可避免。所以Facebook的工程师提出了前端的Flux架构,这个架构的最大特点是单向数据流(后面详述)。但是Flux本身的实现有很多不合理的地方,比如单例的Dispatcher会在系统中有多种事件时导致臃肿的switch-cases等,鉴于Flux本身只是一个架构,而且Facebook提供的参考实现又有一些问题,所以社区有了很多版本的Flux实现。比如我们这里会用到的Reflux。
3、Reflux的提出解决了什么问题
- 解决了数据在 React 应用中的流动方式及过程
React中的流动方式是怎样的
- 我们将数据传送给顶层组件,同样作为父祖件的它,便可以通过组件的属性将一些有用的数据传给各个子组件,一级一级自上而下传递下去,最终每一个组件都得到自己渲染所需的数据,从而完成UI渲染
Reflux是怎么解决的
- 主要由actions和stores组成,例:当组件list增加Item时,会调用actions某个方法(如addItem(data)并将新的数据当参数传递进去,通过事件机制,数据会传送到stores中,stores可以向服务器发送请求并提交给数据库,数据更新后,再通过事件机制传递到list当中,并更新UI
4、Reflux的优势在哪里
- 单向数据流(核心思想)
- 数据层(M)与视图层(V)抽离
什么是单向数据流
- Actions ────────────> Stores ────────────> View Components
^
└──────────────────────────────────────┘
如上图数据和操作在三者之间单向流动
数据单向流动的优点和缺点
- 优点:数据流动方向可以跟踪,流动单一,追查问题的时候可以跟快捷
- 缺点:写起来不太方便。要使UI发生变更就必须创建各种action来维护对应的state
5、与Flux的相同点
- 都有action、store、单项数据流
6、与Flux的不同点
- 通过内部拓展actions的行为,移除了单例的dispatcher
- stores可以监听actions的行为,无需进行冗杂的switch判断
- stores可以相互监听,可以进行进一步的数据聚合操作,类似于,map/reduce
- waitFor被连续和平行的数据流所替代
7、Reflux怎么安装
- npm安装:npm install reflux
- bower安装:bower install reflux
8、Reflux主要内容有什么
- Action
- Store
- view(controller-views)
什么是Action
- Action 是把数据从应用传到 store 的有效载荷,是store 数据的唯一来源,只用来描述“发生了什么”
怎么创建Action
- 创建单个actions:
var addItem = Reflux.createAction();
创建多个actions:
var TodoActions = Reflux.createActions([ 'addItem', 'deleteItem']);
什么是Store
- 负责封装应用的业务逻辑和数据交互
怎么创建Store
var TodoStore = Reflux.createStore({ init: function () { this.listenTo(TodoActions.addItem, 'addItem'); this.listenTo(TodoActions.deleteItem, 'deleteItem'); }, addItem: function (model) { console.log(model) }, deleteItem:function(model){ console.log(model); } });
什么是Views(controller-views)
- 整个App 的 入口,监听store 的变化以获取新的数据,重新render 自己及子组件
9、实现一个Hello World
需求分析
- 学习 使用 reflux 实现 界面渲染hello world
分解任务
- 使用React创建一个组件,在页面渲染出hello word
- 安装Reflux
- 通过创建一个action 将“hello world”,传给创建的stores,然后 stores 将值传递给 component,并且渲染到页面
- 将代码上传至github
分步实现任务
- 使用React创建一个组件,在页面渲染出hello word
'use strict';import React from 'react';import {render} from 'react-dom';const App = React.createClass({ render:function(){ return <div> hello world </div> }});render(<App/>, document.getElementById("content"));
- 安装Reflux
npm install reflux
- 通过创建一个action 将“hello world”,传给创建的stores,然后 stores 将值传递给 component,并且渲染到页面
'use strict';import React from 'react';import Reflux from 'reflux';import {render} from 'react-dom';const action = Reflux.createActions(['getHello']);const store = Reflux.createStore({ listenables: [action], onGetHello: function (hello) { this.trigger(hello); }});const App = React.createClass({ mixins: [Reflux.connect(store, "hello")], componentDidMount: function () { action.getHello("hello world!"); }, render: function () { return <div> {this.state.hello} </div> }});render(<App/>, document.getElementById("content"));
- 将代码上传至github
10、总结
- 以后学习新知识的时候要分清问题的侧重点,确定目标后再分步学习去完成目标
- 学习知识要在最开始确定任务范围,尽量不引入别的新知识,增加学习负担
- 学习知识时要始终保持一颗积极学习新知识的心
0 0
- 初学Reflux
- Reflux
- Reflux
- React Reflux
- ReFlux详解
- Reflux详解
- Reflux详解
- ReFlux细说
- React Reflux
- Reflux helloworld
- reflux web 中action
- reflux web 中store
- reflux react 例子
- react爬坑记16---reflux
- Redux和Reflux研究
- react ReFlux细说
- Reflux 简单使用
- Reflux.connect mixin 学习
- 随机访问介质控制协议
- javascript中this关键字---总结2
- 搞清字库表、编码字符集、字符编码
- 291_自定义可点击表格
- CSS3 径向渐变 radial-gradient
- 初学Reflux
- Parcelable混淆
- 学习笔记_实例属性和类属性
- Spring框架学习1.0对动态代理的理解z,自定义BeanFactory
- 学习笔记_面向对象编程
- web 服务器安全相关
- 英语学习——螓首蛾眉
- Android中图片的三级缓存详解
- 学习笔记_错误处理