1 概述
ReactRedux 是 Redux 官方为 React 提供的绑定库,让我们可以在 React 中更方便的使用 Redux。
在 ReactRedux 中,用户只需要提供 UI 组件,ReactRedux 会自动生成容器组件来管理状态。
2 怎么使用
2.1 安装
ReactRedux 基于 redux,所以需要将 redux 一并安装。
1 | npm install redux react-redux |
2.2 使用
2.2.1 Provider 组件
Provider 是 ReactRedux 提供的组件,这个组件能够连接 Store ,并可以将 Store 提供给所有的子组件。
Provider 内部使用 React 的 Context 机制使 Store 在子组件内共享。
2.2.1.1 语法
1 | <Provider store> |
2.2.1.2 示例
使用 Provider 把 React 根组件包裹起来,即可将 Store 专递给所有子组件
1 | import React from "react"; |
2.2.2 connect 方法
connect 是 ReactRedux 提供的方法,能够将 UI 组件和 ReduxStore 连接起来,并返回一个新的、包裹了 UI 组件的、可以管理 UI 组件状态的容器组件。
2.2.2.1 语法
1 | function connect(mapStateToProps?, mapDispatchToProps?, mergeProps?, options?) |
mapStateToProps?: (state, ownProps?) => Object
- 参数
- state: 是全局的 ReduxStore
- ownProps?: 容器组件的 props 属性
- 返回值:会作为 UI 组件的 props 属性
- 功能描述:
- 通过 mapStateToProps 可以将 ReduxStore 中的数据映射到 UI 组件的 props 属性。
- mapStateToProps 是 ReduxStore 的监听器,当 ReduxStore 更新时,就会触发 Ui 组件的重新渲染。不传递 mapStateToProps 时, UI 组件将不感知 ReduxStore 的更新。
- 使用了参数 ownProps 后,当容器组件的 props 发生变化,会触发 UI 组件的更新。
- 参数
mapDispatchToProps?: Object | (dispatch, ownProps?) => Object
- 参数
- dispatch: 即 ReduxStore.dispatch
- ownProps?: 容器组件的 props 属性
- 返回值
- 函数类型时,返回值为 dispatch 和 UI 组件的 函数类型 props 的对应关系
- 对象类型时,此对象为 dispatch 和 UI 组件的 函数类型 props 的对应关系
- 功能描述
- 通过 mapDispatchToProps 可以将 dispatch 和 UI 组件的 函数类型 props 对应起来
- 参数
mergeProps?: (stateProps, dispatchProps, ownProps) => Object
- 参数
- stateProps:mapStateToProps 返回值
- dispatchProps: mapDispatchToProps 返回值
- ownProps:容器组件的 props 属性
- 返回值
- 返回值会作为 UI 组件的 props 属性
- 功能描述
- 用来自定义 UI 组件的 props 属性
- 参数
options?: Object
- 参数
- [
pure = true
] (Boolean): 为 true 时,connector 将执行shouldComponentUpdate
并且浅对比mergeProps
的结果,避免不必要的更新,前提是当前组件是一个“纯”组件,它不依赖于任何的输入或 state 而只依赖于 props 和 Redux store 的 state。默认值为 true。 - [
withRef = false
] (Boolean): 如果为 true,connector 会保存一个对被包装组件实例的引用,该引用通过getWrappedInstance()
方法获得。默认值为 false。
- [
- 参数
2.2.2.2 示例
1 | import React from "react"; |