随着前端单页面开发愈来愈复杂,javascript须要管理愈来愈多的状态state。若是一个model的变化引发另外一个model的变化,view的变化,那么当 view 变化时,就可能引发对应 model 以及另外一个 model 的变化,依次地,可能会引发另外一个 view 的变化。直至你搞不清楚到底发生了什么。state 在何时,因为什么缘由,如何变化已然不受控制。 当系统变得错综复杂的时候,想重现问题或者添加新功能就会变得举步维艰。Redux使得state在变化和异步中可预测。javascript
在使用redux的应用中,全部的stae都以一个对象树的形式存储在单一的store中,唯一改变 state 的办法是触发 action,action 如何改变 state 树,须要编写 reducers。前端
Action 把数据从应用传到 store 。它是 store 数据的惟一来源。经过 store.dispatch() 将 action 传到 store。
Reducers 指定了应用状态的变化如何响应 actions 并发送到 store 的,actions 只是描述了有事情发生了这一事实,并无描述应用如何更新 state。更新state的函数称为reducer,它是一个纯函数,接受旧的state和action,返回新的state。reducer必须是一个纯函数,不能进行以下操做:java
Redux提供了combineReducers函数,该函数接受一个对象,做用是生成一个函数,这个函数来调用你的一系列 reducer,每一个 reducer 根据它们的 key 来筛选出 state 中的一部分数据并处理,而后这个生成的函数再将全部 reducer 的结果合并成一个大的对象。没有任何魔法。正如其余 reducers,若是 combineReducers() 中包含的全部 reducers 都没有更改 state,那么也就不会建立一个新的对象。react
Store 是action和reader之间的桥梁,是把它们联系到一块儿的对象。Redux 应用只有一个单一的 store
Store有如下功能:redux
使用createStore建立一个Store并发
const Store = createStore(reducers,other)
Redux是单向数据流。单向数据流的好处:意味着应用中全部的数据都遵循相同的生命周期,这样可让应用变得更加可预测且容易理解。同时也鼓励作数据范式化,这样能够避免使用多个且独立的没法相互引用的重复数据。app
使用react-redux。在react-redux的使用中,关注两个方法:Provider和connectdom