为什么要用react-redux?
我们知道 React 的核心思想是 构建组件, 然后各个组件维护自己的状态(state)和UI,当状态变化时,自动重新渲染整个组件。
可以看出 React 实现的是 MVC 中的 V 层,而React对组件间数据流的管理是比较弱的,父子组件之间数据传递还比较简单,子组件可以通过 this.props 访问到父组件的数据/方法,而非父子组件之间的通信一般是通过一个全局事件来进行监听,如果组件非常多的话,这对数据流的管理是非常不方便的。
因此就有人搞了个 redux出来。一开始控制数据流使用的是Flux,后来 Dan Abramov 在 React Europe 2015 上作了一场令人印象深刻的演示 Hot Reloading with Time Travel之后,Redux 迅速成为最受人关注的 Flux 实现之一。。
react-redux有什么东西要学?
Action
- 用于描述发生了什么
Reducer
- 根据Action更新state
Store
- 维持应用的state
- 提供getState()方法获取state
- 提供dispatch(action)方法更新state
- 通过subscribe(listener)注册监听器
一个Redux应用只有一个单一的Store
数据流
- 严格的单向数据流是Redux架构的设计核心
- 应用中所有的数据都遵循相同的生命周期(鼓励做数据范式化)
Redux应用中数据的生命周期遵循以下4个步骤:
- 调用 store.dispatch(action)
- Redux Store调用传入的reducer函数(参数: state , action)
- 根reducer把多个子reducer合并成一个单一的state树 ( combineReducer( { } ))
- Redux store 保存了根 reducer 返回的完整 state 树。
实践 React+Redux
redux和react之间没有关系, redux 支持react、Angular、jQuery,Backbone甚至纯JavaScript)
- Redux 通过Action的形式来改变 state (全局)
- 容器组件(Smart/Container Components)和展示组件(Dumb/Presentational Components)
容器组件 | 展示组件 | |
---|---|---|
Location | 最顶层,路由处理 | 中间和子组件 |
Aware of Redux | 是 | 否 |
读取数据 | 从 Redux 获取 state | 从 props 获取数据 |
修改数据 | 向 Redux 派发 actions | 从 props 调用回调函数 |
Redux 的 React 绑定库包含了 容器组件和展示组件相分离 的开发思想。
明智的做法是只在最顶层组件(如路由操作)里使用 Redux。其余内部组件仅仅是展示性的,所有数据都通过 props 传入。
未完待续````