我们可以先通过对比 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