每一个中间件的出现都是为了解决某个问题而来。redux 就是为了解决state的不可测而生,redux试图让state变得可预测。
所有的state都会被存放到一个object对象树中,并且object只存在于唯一一个state中
唯一能改变state的方法就是通过action触发,action 只是描述了有事情发生了这一事实,并没有指明应用如何更新 state–reducer才是。
reducer就是一个函数,接收旧的 state 和 action,返回新的 state。
reducer 纯净非常重要。永远不要在 reducer 里做这些操作:
Flux:是Facebook用户建立客户端Web应用的前端架构, 它通过利用一个单向的数据流补充了React的组合视图组件,这更是一种模式而非正式框架,你能够无需许多新代码情况下立即开始使用Flux。
了解更多关于Fulx:
共同点:
区别:
Action 只是描述了有事情发生了这一事实; 是把数据从应用传到 store 的有效载荷。它是 store 数据的唯一来源。一般来说你会通过 store.dispatch() 将 action 传到 store。
注意点:
指明应用如何更新 state。
//reducer 就是一个函数,接收旧的 state 和 action,返回新的 state。
(previousState, action) => newState
要点:
把一个由多个不同 reducer 函数作为 value 的 object,合并成一个最终的 reducer 函数,然后就可以对这个 reducer 调用 createStore.
换句话就是:
combineReducers() 所做的只是生成一个函数,这个函数来调用你的一系列 reducer, 每个 reducer 根据它们的 key 来筛选出 state 中的一部分数据并处理,然后这个生成的函数所所有 reducer 的结果合并成一个大的对象。
import { combineReducers } from 'redux';
const todoApp = combineReducers({
visibilityFilter,
todos
});
export default todoApp;
// 完全等价
export default function todoApp(state = {}, action) {
return {
visibilityFilter: visibilityFilter(state.visibilityFilter, action),
todos: todos(state.todos, action)
};
}
Store 就是把Action 和 Reducer联系到一起的对象。Store 有以下职责:
创建方式:
import { createStore } from 'redux'
import todoApp from './reducers'
let store = createStore(todoApp)
接收2个参数:一个是当前action ,以及初始化是的state.state可选。
createStore(reducer, [initialState])
严格的单向数据流是 Redux 架构的设计核心。
这意味着应用中所有的数据都遵循相同的生命周期,这样可以让应用变得更加可预测且容易理解。同时也鼓励做数据范式化,这样可以避免使用多个且独立的无法相互引用的重复数据。
Redux 应用中数据的生命周期遵循下面 4 个步骤:
Redux 和 React 之间没有关系。Redux 支持 React、Angular、Ember、jQuery 甚至纯 JavaScript。
Redux 还是和 React 和 Deku 这类框架搭配起来用最好,因为这类框架允许你以 state 函数的形式来描述界面,Redux 通过 action 的形式来发起 state 变化。