【 React 】 在React项目中是如何使用Redux的?

1. 背景

在前面文章了解中,我们了解到redux是用于数据状态管理,而react是一个视图层面的库如果将两者连接在一起,可以使用官方推荐react-redux库,其具有高效且灵活的特性react-redux将组件分成:

  • 容器组件:存在逻辑处理
  • UI组件:只负责现显示和交互,内部不处理逻辑,状态由外部控制

通过redux将整个应用状态存储到store中,组件可以派发dispatch行为action给store其他组件通过订阅store中的状态state来更新自身的视图

2. 如何做

使用react-redux分成了两大核心:

  • Provider
  • connection

2.1 Provider

在redux中存在一个store用于存储state,如果将这个store存放在顶层元素中,其他组件都被包裹在顶层元素之上

那么所有的组件都能够受到redux的控制,都能够获取到redux中的数据

使用方式如下

javascript 复制代码
<Provider store = {store}> 
    <App /> 
<Provider>

2.2 connection

connect 方法将 store 上的 getState 和 dispatch 包装成组件的 props导入 conect 如下:

javascript 复制代码
import { connect } from "react-redux";

用法如下

javascript 复制代码
connect(mapStateToProps, mapDispatchToProps)(MyComponent)

可以传递两个参数:

  • mapStateToProps
  • mapDispatchToProps

2.3 mapStateToProps

把 redux中的数据映射到 react 中的 props 中去如下

javascript 复制代码
const mapStateToProps = (state) => {
    return {
        // prop : state.xxx |意思是将 state中的某个数据映射到props中
        foo: state.bar
    } 
}
const mapStateToProps = (state) => {
    return {
        // prop : state.xxx |意思是将 state中的某个数据映射到props中
        foo: state.bar
    } 
}

组件内部就能够通过 props 获取到 store 中的数据

javascript 复制代码
class Foo extends Component {
    constructor(props){
    super(props);
    }
    render(){
        return(
            // state.bar
            <div>this.props.foo</div>
        )
    }
}
Foo = connect()(Foo)
export default Foo

2.4 mapDispatchToProps

将redux中的dispatch映射到组件内部的props中

javascript 复制代码
const mapDispatchToProps = (dispatch) => { // 默认传递的参数就是dispatch
    return {
        onClick: () => {
            dispatch({
                type: 'increatment'
            }); 
        } 
    }; 
}
class Foo extends Component {
    constructor(props){
        super(props); 
    }
    render(){
        return(<button onClick = {this.props.onClick}> increase</button>) 
    } 
}
Foo = connect()(Foo);
export default Foo;
相关推荐
键盘鼓手苏苏1 天前
Flutter for OpenHarmony:markdown 纯 Dart 解析引擎(将文本转化为结构化 HTML/UI) 深度解析与鸿蒙适配指南
前端·网络·算法·flutter·ui·html·harmonyos
芭拉拉小魔仙1 天前
企业级Vue项目的状态管理:从原理到实战架构
前端·vue.js·架构
恋猫de小郭1 天前
丰田正在使用 Flutter 开发游戏引擎 Fluorite
android·前端·flutter
扶苏10021 天前
Vue 3 响应式原理深度解析
前端·javascript·vue.js
NEXT061 天前
React 性能优化:图片懒加载
前端·react.js·面试
PineappleCoder1 天前
别让字体拖了后腿:FOIT/FOUT 深度解析与字体加载优化全攻略
前端·性能优化
NEXT061 天前
后端跑路了怎么办?前端工程师用 Mock.js 自救实录
前端·后端·程序员
装不满的克莱因瓶1 天前
Java7新特性:try-with-resources写法
java·前端·javascript·jdk·新特性·jdk7
SailingCoder1 天前
【 从“打补丁“到“换思路“ 】一次企业级 AI Agent 的架构拐点
大数据·前端·人工智能·面试·架构·agent
~央千澈~1 天前
抖音弹幕游戏开发之第12集:添加冷却时间机制·优雅草云桧·卓伊凡
java·服务器·前端