FLUX

进化 Flux

咱们能够先经过对比 Redux 和 Flux 的实现来感觉一下 Redux 带来的惊艳。javascript

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

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 解藕了,很快咱们就能看到它带来的好处。ide

接下来是 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 把它简化成了这样:ui

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) => statespa

什么是 pure function

若是一个函数没有任何反作用(side-effects),不会影响任何外部状态,对于任何一个相同的输入(参数),不管什么时候调用这个函数老是返回一样的结果,这个函数就是一个 pure function。所谓 side-effects 就是会改变外部状态的因素 ,好比 Ajax 请求就有 side-effects,由于它带来了不肯定性。code

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

基于这样的 Store,能够作不少扩展,这也是 Redux 强大之处。ip

来源:The Evolution of Flux Frameworks

相关文章
相关标签/搜索