redux理解

17 min read

中文文档

http://www.redux.org.cn/

redux是什么

1.redux是一个专门用于做状态管理的JS库(不是react插件库)。

2.它可以用在react, angular, vue等项目中, 但基本与react配合使用。

3.作用: 集中式管理react应用中多个组件共享的状态。

什么情况下需要使用redux

1.某个组件的状态,需要让其他组件可以随时拿到(共享)。

2.一个组件需要改变另一个组件的状态(通信)。

3.总体原则:能不用就不用, 如果不用比较吃力才考虑使用。

redux的三个核心概念

action:动作的对象,包含2个属性

type:标识属性, 值为字符串, 唯一, 必要属性
data:数据属性, 值类型任意, 可选属性

例子:

{ type: 'ADD_STUDENT',data:{name: 'tom',age:18} }

reducer: 用于初始化状态、加工状态; 加工时,根据旧的state和action, 产生新的state的纯函数

store:将state、action、reducer联系在一起的对象

如何得到此对象?

1)import {createStore} from 'redux'
2)import reducer from './reducers'
3)const store = createStore(reducer)

此对象的功能?

1)getState(): 得到state
2)dispatch(action): 分发action, 触发reducer调用, 产生新的state
3)subscribe(listener): 注册监听, 当产生了新的state时, 自动调用

redux的核心API

1.createstore() :创建包含指定reducer的store对象

2.store对象 作用: redux库最核心的管理对象

它内部维护着: 1)state 2)reducer

redux核心方法:

1)getState()
2)dispatch(action)
3)subscribe(listener)

具体编码:

store.getState()
store.dispatch({type:'INCREMENT', number})
store.subscribe(render)
applyMiddleware(): 应用上基于redux的中间件(插件库)
combineReducers(): 合并个reducer函数

redux异步编程

1.redux默认是不能进行异步处理的, 2.某些时候应用中需要在redux中执行异步任务(ajax, 定时器)

使用异步中间件

npm install --save redux-thunk

react-redux

一个react插件库 专门用来简化react应用中使用redux

react-Redux将所有组件分成两大类

1.UI组件

1)只负责 UI 的呈现,不带有任何业务逻辑

2)通过props接收数据(一般数据和函数)

3)不使用任何 Redux 的 API

4)一般保存在components文件夹下

2.容器组件

1)负责管理数据和业务逻辑,不负责UI的呈现

2)使用 Redux 的 API

3)一般保存在containers文件夹下

1.Provider:让所有组件都可以得到state数据

2.connect:用于包装 UI 组件生成容器组件

3.mapStateToprops:将外部的数据(即state对象)转换为UI组件的标签属性

4.mapDispatchToProps:将分发action的函数转换为UI组件的标签属性