注意:老铁些,在看这篇文章的之前,最好了解一下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使用

  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 填坑的更多相关文章

  1. React Native填坑之旅--Stateless组件

    Stateless component也叫无状态组件.有三种方法可以创建无状态组件. 坑 一般一个组件是怎么定义的: 很久以前的方法: const Heading = createClass({ re ...

  2. React Native填坑之旅--与Native通信之iOS篇

    终于开始新一篇的填坑之旅了.RN厉害的一个地方就是RN可以和Native组件通信.这个Native组件包括native的库和自定义视图,我们今天主要设计的内容是native库方面的只是.自定义视图的使 ...

  3. React Native填坑之旅--Flow篇(番外)

    flow不是React Native必会的技能,但是作为正式的产品开发优势很有必要掌握的技能之一.所以,算是RN填坑之旅系列的番外篇. Flow是一个静态的检查类型检查工具,设计之初的目的就是为了可以 ...

  4. React Native填坑之旅--重新认识RN

    如同黑夜里的一道光一样,就这么知道了F8. F8是每年一次Facebook每年一次的开发者大会.每次大会都会release相应的APP,iOS.Android都有.之前都是用Native开发的,但是2 ...

  5. React Native填坑之旅--布局篇

    代码在这里: https://github.com/future-challenger/petshop/tree/master/client/petshop/src/controller 回头看看RN ...

  6. React Native填坑之旅--Navigation篇

    React Native的导航有两种,一种是iOS和Android通用的叫做Navigator,一种是支持iOS的叫做NavigatorIOS.我们这里只讨论通用的Navigator.会了Naviga ...

  7. React Native填坑之旅--ListView篇

    列表显示数据,基本什么应用都是必须.今天就来从浅到深的看看React Native的ListView怎么使用.笔者写作的时候RN版本是0.34. 最简单的 //@flow import React f ...

  8. React Native填坑之旅--动画

    动画是提高用户体验不可缺少的一个元素.恰如其分的动画可以让用户更明确的感知当前的操作是什么. 无疑在使用React Native开发应用的时候也需要动画.这就需要知道RN都给我们提供了那些动画,和每个 ...

  9. React Native填坑之旅--Button篇

    从React过来,发现React Native(以下简称RN)居然没有Button.隔壁的iOS是有UIButton的,隔壁的隔壁的Android里也是有的.没有Button,就没有点击效果啊.这还真 ...

随机推荐

  1. Haskell复习笔记(一)

    Haskell笔记这是第三次总结,前两次都因为各种原因丢失了,对于Haskell我算不上什么大神,只不过在大学时为了学习算法时选择了Haskell. 当时的入门书籍选择的是<Learn You ...

  2. JavaScript基础知识梳理,你能回答几道题?

    在学习JavaScript的时候,总是这里学一点,那里学一点,很的很零星,很杂,没有很系统的去学习,感觉好像JavaScript的知识点都了解了,但是真正要说起来,又不知道从何说起! 最深刻的体会就是 ...

  3. OpenCV入门之寻找图像的凸包(convex hull)

    介绍   凸包(Convex Hull)是一个计算几何(图形学)中的概念,它的严格的数学定义为:在一个向量空间V中,对于给定集合X,所有包含X的凸集的交集S被称为X的凸包.   在图像处理过程中,我们 ...

  4. “笨方法”学习Python笔记(2)-VS Code作为文本编辑器以及配置Python调试环境

    Visual Studio Code 免费跨平台文本编辑器,插件资源丰富,我把其作为Debug的首选. 下载地址:https://code.visualstudio.com/Download 安装之后 ...

  5. [转]Docker和Rancher的安装与基本使用

    本文转自:https://blog.csdn.net/wangshouhan/article/details/80405672 一.Docker1.CentOS下Docker安装 安装 $ yum - ...

  6. [转]Laravel 数据库实例教程 —— 使用查询构建器实现对数据库的高级查询

    本文转自:https://laravelacademy.org/post/920.html 上一节我们简单介绍了如何使用查询构建器对数据库进行基本的增删改查操作,这一节我们来探讨如何使用查询构建器实现 ...

  7. 第一册:lesson sixty one.

    原文: A bad cold. A:Where is Jim? B:He is in bed. A:What's the matter with him? B:He fells ill. A:He l ...

  8. win10 uwp 商业游戏 1.2.1

    上一个游戏已经告诉大家如何写多个游戏,现在继续写这个无聊的游戏 希望大家在看这篇文章之前先看win10 uwp 商业游戏,在这个文章告诉了大家如何创建游戏. 修改数值 可以从上一篇的博客的游戏看到升级 ...

  9. nginx代理配置 配置中的静态资源配置,root 和 alias的区别。启动注意事项

    这篇主要内容是:nginx代理配置 配置中的静态资源配置,root 和 alias的区别.启动注意事项! 为什么会在window上配置了nginx呢?最近我们的项目是静态资源单独放在一个工程里面,后端 ...

  10. <a>标签的特殊和文本的样式

    a是特殊的,要改变a里面的颜色,必须直接给a设置,给a的父级设置不行 属性继承:明明是父级上的的设置样式,结果后代标签也跟着发生变化,这就叫做属性继承. Html 标记语言, 不是编程语言.说白了就是 ...