注意:老铁些,在看这篇文章的之前,最好了解一下react 的全局状态管理库哦,不然可能会坐飞机。 ^_^
React 之reflux (它是一个功能模块,需要安装引入):
import Reflux from 'reflux';
let action = Reflux.createAction();//1使用
let actions = Reflux.createActions(['add','delete','check']);//1使用
let store = Reflux.createStore({});//1使用
- 创建action和store:
1.1:reflux.createAction(): 创建一个action;返回值是一个函数,调用这个函数就会触发相应的事件,在store中监听这个函数,并作相 应的处理。
reflux.createActions([]):创建多个action;返回值是一个对象,包含多个函数。
1.2:reflux.createStore({}); 创建store实例,返回一个对象。
1.3:创建action方法的公用方法,reflux.ActionMethods.pck = function(){}; 。//pck方法是你要创建的公用方法
单个action使用公用方法:action.pck();
多个action使用公用方法:actions.add.pck();
1.4:创建Store的公用方法,reflux.StoreMethods.pck = function(){}; 。
1.5:拓展store的公用方法:
1.5.1:reflux.StoreMethods.pck = function(){}; //pck是定义的方法名。
1.5.2:let mixin = { pck: function(){} };
let store = reflux.createStore({ mixins:[mixin], ...});
===============================================================================================================================
2. Store监听Action:
let actions = reflux.createActions([ ‘add’, ‘delete’, ‘check’]);
let actions1 = reflux.createAction();
let store = reflux.createStore({ init: function(){}, ...});
2.1:this.listenTo( actions.add, “add”); 第一个参数是actions对象的方法。第二个参数是store对象监听action的方法调用的方法名。如果是actions1的话,那么 写法就是this.listenTo( actions1, “actions1”); first和second参数名不需要一致。
2.2:this.listenToMany(actions); 参数actions必须是json对象。
处理方法的写法只需让action 的标识首字母大写并加上on 就可以了。例如:add→onAdd。
2.3:listenables: [actions]; 属性值actions必须是json对象。
处理方法的写法只需让action的标识首字母大写并加上on就可以了。例如:add→onAdd。
注意:2.1和2.2都是写在init函数内部,2.3方法是属性写法,listenables是配置 属性。并且2.2和2.3的参数或者属性值必须是 createActions 创建的action,也就是actions。
===============================================================================================================================
3. 异步action :let asyncAction = Reflux.createAction({asyncResult: true});
===============================================================================================================================
4. Action hooks:Reflux为每个action 方法都提供了两个hook方法。
4.1:preEmit(params) ,action emit之前调用,参数是action传递过来的,返回值 会传递给shouldEmit();
4.2:shouldEmit(params) ,action emit之前调用,参数默认是action传递,如果 preEmit有返回值,则是preEmit返回值;shouldEmit()的返回值决定是否 触发action事件。
4.3:注意,如果preEmit有返回值,则该返回值会作为action事件的参数;否则就是action的初始参数;不论shouldEmit的返回值是什么,它只是决定是否触 发action事件。
===============================================================================================================================
5. 同组件结合:
let store = Reflux.createStore({});
5.1:store.listen(func); func:被监听的函数。返回值是解除store监听的一个函数。
5.1.1:当组件的生命周期结束时需要解除对Store的监听。
5.1.2: 当Store调用trigger时,才会执行func函数,所以每次Store 更新时,需要手动调用trigger函数。
5.1.3:并且store.trigger(params); 的参数将是func的参数(如果有)。
5.2:mixins: [Reflux.ListenerMixin] + store.listen(func);
5.2.1:适用于作为React.createClass({})的配置属性。
例如:let test = React.createClass({ mixins: [Reflux.ListenerMixin] }); (首字母大写 ListenerMixin)
5.2.2:接下来的写法和5.1方法一样,不过没有了5.1.1的限制。
5.3:mixins: [Reflux.listenTo(store, “func”)]
5.3.1:适用于作为React.createClass({})的配置属性。
例如:let test = React.createClass({mixins: [Reflux.listenTo(store, “func”)] });
5.3.2:它比5.2更优化的是,没有了store.listen(func); 但是也必须要手动触发 store.trigger();
5.4:minxins: [Reflux.connect(store, ‘list’)]
5.4.1:它相对应5.3来说,优化了一点,也就是不需要函数来更新state里面 的list,但是还是必须手动触发store.trigger()。
5.4.2:注意,这里的‘list’参数是state里面的属性名(被监听的)。
5.5:mixins: [Reflux.connectFilter(store, ‘list’, function(list){})];
5.5.1:相对于5.4来说,只是增加了一个数据过滤器。
5.5.2:第三个参数就是过滤函数。参数名不必和第二个参数名相同。
5.5.3:还是必须要手动触发 store.trigger(); 。
总结:这5种结合的方法,都必须手动触发store.trigger(); ;
5.4方法与5.5方法的第二个参数名必须和state里面的属性(被监听)名一 致(字符串)。
各位老铁,有错误的地方欢迎指正,多多指教了。^_^
react 之 reflux 填坑的更多相关文章
-
React Native填坑之旅--Stateless组件
Stateless component也叫无状态组件.有三种方法可以创建无状态组件. 坑 一般一个组件是怎么定义的: 很久以前的方法: const Heading = createClass({ re ...
-
React Native填坑之旅--与Native通信之iOS篇
终于开始新一篇的填坑之旅了.RN厉害的一个地方就是RN可以和Native组件通信.这个Native组件包括native的库和自定义视图,我们今天主要设计的内容是native库方面的只是.自定义视图的使 ...
-
React Native填坑之旅--Flow篇(番外)
flow不是React Native必会的技能,但是作为正式的产品开发优势很有必要掌握的技能之一.所以,算是RN填坑之旅系列的番外篇. Flow是一个静态的检查类型检查工具,设计之初的目的就是为了可以 ...
-
React Native填坑之旅--重新认识RN
如同黑夜里的一道光一样,就这么知道了F8. F8是每年一次Facebook每年一次的开发者大会.每次大会都会release相应的APP,iOS.Android都有.之前都是用Native开发的,但是2 ...
-
React Native填坑之旅--布局篇
代码在这里: https://github.com/future-challenger/petshop/tree/master/client/petshop/src/controller 回头看看RN ...
-
React Native填坑之旅--Navigation篇
React Native的导航有两种,一种是iOS和Android通用的叫做Navigator,一种是支持iOS的叫做NavigatorIOS.我们这里只讨论通用的Navigator.会了Naviga ...
-
React Native填坑之旅--ListView篇
列表显示数据,基本什么应用都是必须.今天就来从浅到深的看看React Native的ListView怎么使用.笔者写作的时候RN版本是0.34. 最简单的 //@flow import React f ...
-
React Native填坑之旅--动画
动画是提高用户体验不可缺少的一个元素.恰如其分的动画可以让用户更明确的感知当前的操作是什么. 无疑在使用React Native开发应用的时候也需要动画.这就需要知道RN都给我们提供了那些动画,和每个 ...
-
React Native填坑之旅--Button篇
从React过来,发现React Native(以下简称RN)居然没有Button.隔壁的iOS是有UIButton的,隔壁的隔壁的Android里也是有的.没有Button,就没有点击效果啊.这还真 ...
随机推荐
-
MongoDB 3.0以上版本设置访问权限、设置用户
定义:创建一个数据库新用户用db.createUser()方法,如果用户存在则返回一个用户重复错误. 语法:db.createUser(user, writeConcern) user这个文档创 ...
-
Asp.net MVC 处理文件的上传下载
如果你仅仅只有Asp.net Web Forms背景转而学习Asp.net MVC的,我想你的第一个经历或许是那些曾经让你的编程变得愉悦无比的服务端控件都驾鹤西去了.FileUpload就是其中一个, ...
-
iOS 多线程学习笔记 —— NSThread
本文复制.参考自文章:iOS多线程编程之NSThread的使用 ,主要为了加强个人对知识的理解和记忆,不做他用.原作者声明: 著作权声明:本文由http://blog.csdn.net/totogo ...
-
HDOJ 5000 Clone
所有的属性,以满足一定的条件,是,财产和等于sum/2结果最大. Clone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536 ...
-
SQL注入(二)
5.限制输入长度 如果在Web页面上使用文本框收集用户输入的数据,使用文本框的MaxLength属性来限制用户输入过长的字符也是一个很好的方法,因为用户的输入不够长,也就减少了贴入大量脚本的可能性.程 ...
-
缺少的文件是 ..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props。
报错信息: 严重性 代码 说明 项目级别 文件 行 禁止显示状态 工具错误 这台计算机上缺少此项目引用的 NuGet 程序包.使用“NuGet 程序包还原”可下载这些程序包.有关更多信息,请参见 ht ...
-
浅析MSIL中间语言——基础篇(转)
来自:https://www.cnblogs.com/dwlsxj/p/MSIL.html 一.开篇 研究MSIL纯属于个人喜好,说在前面MSIL应用于开发的地方很少,但是很大程度上能够帮着我们理解底 ...
-
cdnbest自定义错误显示节点名教程
在自定义错误里选择js选项,输入: document.write("error!" + hostname); 这是最简单的写法,只显示节点名,如果要显示其他效果,可自已修改js
-
CSS| font property
字體屬性 常用的CSS字体名称 宋体 SimSun 黑体 SimHei 微软雅黑 Microsoft YaHei 微软正黑体 Microsoft JhengHei 新宋体 NSimSun 新细明体 P ...
-
PHP操作数据库函数比较
常用的php语法连接mysql如下 <?php $link = mysql_connect('localhost', 'user', 'password'); mysql_select_db(' ...