zoukankan      html  css  js  c++  java
  • Reflux之Store

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

    一、监听单个action

    const Reflux = require('reflux');
    
    const action = Reflux.createAction();
    const store = Reflux.createStore({
        init() {
            this.data = { num:0 };
            // store监听action
            this.listenTo(action, function(){
                this.data.num++;
                this.trigger(this.data);
            }.bind(this))
        }
    })
    // 监听store触发
    store.listen(data => console.log(data));
    // 触发action
    action.trigger('in action');
    action();
    action();
    action();
    action();
    action();

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

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

    二、同时监听多个actions

    const Reflux = require('reflux');
    
    // const actions = Reflux.createActions(['action1', 'action2']);
    const actions = Reflux.createActions({
        action1: {
            asyncResult: true
        }, 
        action2: {
            asyncResult: true
        }
    });
    
    const store = Reflux.createStore({
        listenables: actions,
        // init() {
        //     this.listenToMany(actions)
        // },
        action1 () {
            console.log('func in action1');
        },
        onAction1Completed () {
            console.log('action1 completed')
        },
        onAction2() {
            console.log('func in action2')
        }
    })
    
    actions.action1();
    actions.action2();
    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';

    import React from 'react';
    
    const action = createAction();
    const store = createStore({
        init() {
            this.data = {num: 0};
            this.listenTo(action, this.onClick);
        },
        onClick () {
            this.data.num ++;
            this.trigger(this.data);
        }
    })
    // React UI
    class ContainerUI extends React.Component {
        constructor (props) {
            super(props);
            this.state = {
                num: 0
            }
        }
        componentDidMount () {
    // 生成关闭函数
    this.unmount = store.listen(data => { this.setState({ num: data.num }) }) } componentWillUnmont () {
          //调用关闭函数
    this.unmount(); } render () { return ( <div> { this.state.num } <button onClick={action}>自增</button> </div> ) } } export default ContainerUI;
  • 相关阅读:
    解决Mac下GDB提示签名错误
    hdu 5015 大数量反复类似操作问题/ 矩阵高速幂
    数据运营报表系统思考 一二
    NGUI 3.5教程(二)Label 标签 (Hello world)、多行文本
    STL 源代码剖析 算法 stl_algo.h -- equal_range
    java字符操作获取汉字的拼音以及其它经常使用工具
    SRAM,SDRAM,网卡
    java.lang.NoClassDefFoundError: ognl/PropertyAccessor解决的方法
    纯手工定制西服怎么鉴别
    缝份_百度百科
  • 原文地址:https://www.cnblogs.com/ceceliahappycoding/p/12368078.html
Copyright © 2011-2022 走看看