zoukankan      html  css  js  c++  java
  • FLUX

    进化 Flux

    我们可以先通过对比 Redux 和 Flux 的实现来感受一下 Redux 带来的惊艳。

    首先是 action creators,Flux 是直接在 action 里面调用 dispatch:

    export function addTodo(text) {
      AppDispatcher.dispatch({
        type: ActionTypes.ADD_TODO,
        text: text
      });
    }
    

    Redux 把它简化成了这样:

    export function addTodo(text) {
      return {
        type: ActionTypes.ADD_TODO,
        text: text
      };
    }
    

    这一步把 dispatcher 和 action 解藕了,很快我们就能看到它带来的好处。

    接下来是 Store,这是 Flux 里面的 Store:

    let _todos = [];
    const TodoStore = Object.assign(new EventEmitter(), {
      getTodos() {
        return _todos;
      }
    });
    AppDispatcher.register(function (action) {
      switch (action.type) {
      case ActionTypes.ADD_TODO:
        _todos = _todos.concat([action.text]);
        TodoStore.emitChange();
        break;
      }
    });
    export default TodoStore;
    

    Redux 把它简化成了这样:

    const initialState = { todos: [] };
    export default function TodoStore(state = initialState, action) {
      switch (action.type) {
      case ActionTypes.ADD_TODO:
        return { todos: state.todos.concat([action.text]) };
      default:
        return state;
    }
    

    同样把 dispatch 从 Store 里面剥离了,Store 变成了一个 pure function(state, action) => state

    什么是 pure function

    如果一个函数没有任何副作用(side-effects),不会影响任何外部状态,对于任何一个相同的输入(参数),无论何时调用这个函数总是返回同样的结果,这个函数就是一个 pure function。所谓 side-effects 就是会改变外部状态的因素 ,比如 Ajax 请求就有 side-effects,因为它带来了不确定性。

    所以现在 Store 不再拥有状态,而只是管理状态,所以首先要明确一个概念,Store 和 State 是有区别的,Store 并不是一个简单的数据结构,State 才是,Store 会包含一些方法来管理 State,比如获取/修改 State。

    基于这样的 Store,可以做很多扩展,这也是 Redux 强大之处。

    来源:The Evolution of Flux Frameworks

  • 相关阅读:
    通过电脑chrome调试手机真机打开的微信H5页面,调试电脑微信H5页面
    关于神策埋点数据采集
    jmeter控制仅一次登录的三种方案
    win10下mysql8.0.19解压版的安装教程
    mysql中的case when then 的用法
    python+openpyxl的excel的相关读写
    使用Gitlab-CI 实现NetCore项目Docker化并部署到阿里云K8S
    NetCore 中间件获取请求报文和返回报文
    WebApi 通过拦截器设置特定的返回格式
    NetCore AutoMapper的封装
  • 原文地址:https://www.cnblogs.com/Annely/p/10455643.html
Copyright © 2011-2022 走看看