zoukankan      html  css  js  c++  java
  • Redux 洋葱模型理解

    下面的代码会输出:

    A middleware1 开始
    C middleware2 开始
    E middleware3 开始
    ======= G =======
    F middleware3 结束
    D middleware2 结束
    B middleware1 结束

    首先 middleware1, middleware2, middleware3 都先串联对象 middlewareAPI,

    var middlewareAPI = {
      getState: store.getState,
      dispatch: (action) => dispatch(action)
    }
    middlewares.map(middleware => middleware(middlewareAPI));

    然后内部是这样执行的 A1( A2( A3(store.dispatch) ) )( actionCreate() ),

    A3的next 是store.dispatch, A2的next 是A3最里层的函数, A1的next 是A2里最里层的函数。

    var A1 = function(next) {
      return function(action) {
        console.log('A middleware1 开始');
        next(action)
        console.log('B middleware1 结束');
      };
    };
    
    var A2 = function(next) {
      return function(action) {
        console.log('C middleware2 开始');
        next(action)
        console.log('D middleware2 结束');
      };
    };
    
    var A3 = function(next) {
      return function(action) {
        console.log('E middleware3 开始');
        next(action)
        console.log('F middleware3 结束');
      };
    };
    <!DOCTYPE html>
    <html>
    <head>
      <script src="//cdn.bootcss.com/redux/3.5.2/redux.min.js"></script>
    </head>
    <body>
    <script>
    function middleware1(store) {
      return function(next) {
        return function(action) {
          console.log('A middleware1 开始');
          next(action)
          console.log('B middleware1 结束');
        };
      };
    }
    
    function middleware2(store) {
      return function(next) {
        return function(action) {
          console.log('C middleware2 开始');
          next(action)
          console.log('D middleware2 结束');
        };
      };
    }
    
    function middleware3(store) {
      return function(next) {
        return function(action) {
          console.log('E middleware3 开始');
          next(action)
          console.log('F middleware3 结束');
        };
      };
    }
      
    function reducer(state, action) {
      if (action.type === 'MIDDLEWARE_TEST') {
        console.log('======= G =======');  
      }
      return {};
    }
      
    var store = Redux.createStore(
      reducer,
      Redux.applyMiddleware(
        middleware1,
        middleware2,
        middleware3
      )
    );
    
    store.dispatch({ type: 'MIDDLEWARE_TEST' });
    </script>
    </body>
    </html>
  • 相关阅读:
    Solr多核的配置
    Solr开发参考文档(转)
    Solr使用solr4J操作索引库
    Solr和IK分词器的整合
    Solr与mmseg4J的整合
    Lucene实例教程
    Lucene简介
    PHP实现大文件的上传设置
    图片上传预览功能实现
    Logstash 安装和使用
  • 原文地址:https://www.cnblogs.com/zhengming2016/p/6918632.html
Copyright © 2011-2022 走看看