• React之React-redux数据流转流程


    1.Redux与React 的联系:

      两者是没有关系的,Redux支持React、angular、jQuery、JavaScript

      Redux与React这类库搭配起来更好用。

    2.react-redux

      react-redux就是Redux官方出的,用于配合React的绑定库

      react-redux能够让你的React组件从Redux store中很方便的读取数据,并且向store中分发action以此来更新数据

    3.React-Redux两个重要的成员

      React这个框架是以组件来驱动的,所以react-redux中有两个重要的部分

    • Provider——是个组件,能够让你整个app都能获取到store中的数据
    • connect——是个方法,能够让组件跟store进行关联

    (1)Provider

      ① Provider包裹在根组件的最外层,让所有的子组件都能拿到State

      ② Provider接收store作为props,然后通过context向下传递,这样react中任何组件都可以通过context获取到store

    实例:

    import React from 'react';
    // 导入我们的store
    import store from './store';
    // 
    import ComA from './pages/ComA';
    import ComB from './pages/ComB';
    
    // 在app.js里面导入Provider组件,利用这个组件,包裹我们的结构,从而能够达到统一维护store的效果
    import { Provider } from 'react-redux'
    
    function App() {
      return (
        <Provider store={store}>
          <div>
            <ComA></ComA>
            <ComB></ComB>
          </div>
        </Provider>
      );
    }
    
    export default App;

     Provider组件的实现:

    • 从react-redux导入Provider组件;
    • 利用Provider组件对整个结构进行包裹
    • 给我们的Provider组件设置store的属性,store的值就是通过createStore创建出来的store实例对象

     

     (2)connect

      ① Provider内部组件如果想用到state中的数据,就必须要connect进行一层包裹封装,换句话说就是必须要被connect进行加强;

      ② connect方法就是方便我们组件能够获取到store中的state

    connect的使用:

    • 导入connect方法
    • 调用connect方法 

    组件属于数据接收方实现第一个参数;组件的属于数据发送方实现第二个参数

    先安装相关依赖:

    yarn add react
    yarn add react-redux
    // react-redux 的作用是帮助redux统一管理react中的store

     ① 数据的发送方ComA(参数二)

    import React, { Component } from 'react'
    // 导入connect,对组件进行加强 import { connect } from "react-redux" class ComA extends Component { handleClick = () => { console.log('ComA', this.props); // 发送action,一旦执行下面一行代码,立马执行mapDispatchToProps中的箭头函数,然后执行了dispatch this.props.sendAction(); } render() { return (
    <div> <button onClick={this.handleClick}>+</button> </div> ) } } const mapDispatchToProps = (dispatch) => { // 要有一个返回值,是一个对象 return { sendAction: () => { // 利用dispatch发送一个action dispatch({ // 注意传递action对象,我们要定义个type属性 type: "add_action" }); } } } // A是数据发送方,所以要实现connect第二个参数。 export default connect(null, mapDispatchToProps)(ComA);
    // connect(要接收数据的函数,要发送action的函数)(放入要加强的组件)
    // 创建connect第二个参数,mapDispatchToProps作用是用来发送action的
    // 在组件的内部就能通过this.props拿到这个方法,从而调用

     数据的接收方ComB(参数一):

    import React, { Component } from 'react'
    import { connect } from "react-redux"
    
    class ComB extends Component {
      render() {
        console.log(this.props);
        return (
          <div>
            {this.props.count}
          </div>
        )
      }
    }
    
    const mapStateToProps = (state) => {
     // 只有return以后,才能在组件内部this.props获取到数据
      return state;
    }
    
    // connect 内部进行判断,是否传入第二个参数,如果有第二个参数,就把第二个参数的返回值来作为dispatch返回,如果没有第二个,默认维护一个dispatch的方法 
    // 数据的接收方,所以需要实现第一个参数
    export default connect(mapStateToProps)(ComB)

    注意的是,ComB(数据接收方)能否拿到数据,关键在于reducer返回了新的state的时候

    数据接收方和发送方,都被connect加强了;

    整体流程如下:

  • 相关阅读:
    如何根据二叉树 前序遍历 中序遍历 后序遍历 中的两种遍历来反推另一种遍历
    dijkstral改编
    纪念做出来的第一道计算几何题
    链式前向星
    一道简单树形dp
    算法进阶指南—特殊排序
    算法进阶指南二分章节的两道题
    秦皇岛winter camp 总结
    C
    一道cf水题
  • 原文地址:https://www.cnblogs.com/codexlx/p/12800231.html
Copyright © 2020-2023  润新知