Reflux中的Store既是一个listener(既有对action的监听,又有对store的监听)同时又是一个publisher.

一、监听单个action

  1. const Reflux = require('reflux');
  2.  
  3. const action = Reflux.createAction();
  4. const store = Reflux.createStore({
  5. init() {
  6. this.data = { num:0 };
  7. // store监听action
  8. this.listenTo(action, function(){
  9. this.data.num++;
  10. this.trigger(this.data);
  11. }.bind(this))
  12. }
  13. })
  14. // 监听store触发
  15. store.listen(data => console.log(data));
  16. // 触发action
  17. action.trigger('in action');
  18. action();
  19. action();
  20. action();
  21. action();
  22. action();

注意: 1. store.listen方法对store自身trigger进行监听。

2. store.listenTo对其他可监听对象进行监听。

二、同时监听多个actions

  1. const Reflux = require('reflux');
  2.  
  3. // const actions = Reflux.createActions(['action1', 'action2']);
  4. const actions = Reflux.createActions({
  5. action1: {
  6. asyncResult: true
  7. },
  8. action2: {
  9. asyncResult: true
  10. }
  11. });
  12.  
  13. const store = Reflux.createStore({
  14. listenables: actions,
  15. // init() {
  16. // this.listenToMany(actions)
  17. // },
  18. action1 () {
  19. console.log('func in action1');
  20. },
  21. onAction1Completed () {
  22. console.log('action1 completed')
  23. },
  24. onAction2() {
  25. console.log('func in action2')
  26. }
  27. })
  28.  
  29. actions.action1();
  30. actions.action2();
  31. actions.action1.completed();

这里,在createStore中使用listenables属性,或者在init函数中使用listenToMany都可以实现对多个action的监听。使用这种写法对应的callback函数,可以与每个action同名,如action1;也可以使用on+Action,如onAction2。如果使用asyncResult属性定义action,默认下面有completed和failed两个children.

三、 react与Reflux结合demo  import { createAction, createStore } from 'reflux';

  1. import React from 'react';
  2. const action = createAction();
  3. const store = createStore({
  4. init() {
  5. this.data = {num: 0};
  6. this.listenTo(action, this.onClick);
  7. },
  8. onClick () {
  9. this.data.num ++;
  10. this.trigger(this.data);
  11. }
  12. })
  13. // React UI
  14. class ContainerUI extends React.Component {
  15. constructor (props) {
  16. super(props);
  17. this.state = {
  18. num: 0
  19. }
  20. }
  21. componentDidMount () {
    // 生成关闭函数
  22. this.unmount = store.listen(data => {
  23. this.setState({
  24. num: data.num
  25. })
  26. })
  27. }
  28. componentWillUnmont () {
          //调用关闭函数
  29. this.unmount();
  30. }
  31. render () {
  32. return (
  33. <div>
  34. { this.state.num }
  35. <button onClick={action}>自增</button>
  36. </div>
  37. )
  38. }
  39. }
  40. export default ContainerUI;

Reflux之Store的更多相关文章

  1. react+reflux入门教程

    为了简化react的flux带来的冗余操作,社区的同仁们给我们带来了很多优秀的轮子,诸如redux,reflux等.今天我们就通过逐行讲解代码实例的方法,感受一番reflux的设计之美. 例子 这个例 ...

  2. 使用reflux进行react组件之间的通信

    前言 组件之间为什么要通信?因为有依赖. 那么,作为React组件,怎么通信? React官网说, 进行 父-子 通信,可以直接pass props. 进行 子-父 通信,往父组件传给子组件的函数注入 ...

  3. react 之 reflux 填坑

    注意:老铁些,在看这篇文章的之前,最好了解一下react 的全局状态管理库哦,不然可能会坐飞机. ^_^ React 之reflux (它是一个功能模块,需要安装引入): import Reflux ...

  4. 【原创】ReFlux细说

    ReFlux细说 Flux作为一种应用架构(application architecture)或是设计模式(pattern),阐述的是单向数据流(a unidirectional data flow) ...

  5. React + Reflux

    React + Reflux 渲染性能优化原理   作者:ManfredHu 链接:http://www.manfredhu.com/2016/11/08/23-reactRenderingPrinc ...

  6. Reflux 使用教程

    Reflux是根据React的flux创建的单向数据流类库.Reflux的单向数据流模式主要由actions和stores组成.例如,当组件list新增item时,会调用actions的某个方法(如a ...

  7. Reflux中文教程——概览

    翻译自github上的reflux项目,链接:https://github.com/reflux/refluxjs 〇.安装及引入 安装: npm install reflux 引入: var Ref ...

  8. Reflux系列01:异步操作经验小结

    写在前面 在实际项目中,应用往往充斥着大量的异步操作,如ajax请求,定时器等.一旦应用涉及异步操作,代码便会变得复杂起来.在flux体系中,让人困惑的往往有几点: 异步操作应该在actions还是s ...

  9. React + Reflux 渲染性能优化原理

    作者:ManfredHu 链接:http://www.manfredhu.com/2016/11/08/23-reactRenderingPrinciple 声明:版权所有,转载请保留本段信息,否则请 ...

随机推荐

  1. C#多线程(13):任务基础①

    目录 多线程编程 多线程编程模式 探究优点 任务操作 两者创建任务的方式 Task.Run() 创建任务 取消任务和控制任务的创建 任务返回结果以及异步获取返回结果 捕获任务异常 全局捕获任务异常 多 ...

  2. 头文件<cmath>中常用函数

    <cmath>里面有很多数学函数,下面说一下常用的一些函数吧:直接把函数原型给了出来,用的时候注意参数 先说一下,c++自身是没有四舍五入函数round()的,若果你要用到的话,可以自己写 ...

  3. 使用cat命令清空文件

    比如要清空 /www/aaa.txt cat /dev/null > /www/aaa.txt; 即可.

  4. tx-Lcn 分布式事务

    测试内容 SpringCloud 微服务,有两个服务,从资料服务调度到文件服务,优先在文件服务那边 save 文件后,然后拿到 fileId 存储在资料服务中.两者之间的调用使用 feign.这期间涉 ...

  5. 鸟哥Linux私房菜(基础篇)——第五章:首次登入与在线求助 man page笔记

    1.X Winsows与文本模式的切换 ●[Ctrl] + [Alt] + [F1] ~ [F6] :文字接口登入 tty1 ~ tty6 终端机.        ●[Ctrl] + [Alt] + ...

  6. css套路学习(一)

    css3信息获取方法 文档搜索:Google css spec; Google: 关键词 MDN; css tricks成熟css代码块sinppets; Google: center css tri ...

  7. jQuery学习(三)

    事件 on方法可以将一个事件绑定在jQuery对象上,当你的操作触发了这些事件时,便会调用你所绑定的函数. 例如,给某个超链接绑定点击事件. <head> <meta http-eq ...

  8. 自定义Element父子不关联的穿梭树

    Element自身是有一个Transfer穿梭框组件的,这个组件是穿梭框结合checkbox复选框来实现的,功能比较单一,自己想实现这个功能也是很简单的,只是在项目开发中,项目排期紧,没有闲功夫来实现 ...

  9. IoTClientTool自动升级更新

    IoTClientTool是什么 IoTClientTool是什么,IoTClientTool是IoTClient开源组件的可视化操的作实现.方便对plc设备和ModBusRtu.BACnet.串口等 ...

  10. spring内嵌jetty容器,实现main方法启动web项目

    Jetty 是一个开源的servlet容器,它为基于Java的web容器,例如JSP和servlet提供运行环境.Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布.开发人员可以将 ...