• react组件间通信之context


    • 一般用于【祖组件】与【后代组件】间通信

      案例:

      A,B,C,D四个组件的关系分别为:爷爷,爸爸,儿子,孙子
      从A向C传递参数:C组件为类式组件
      从A向D传递参数:D组件为函数组件

      import React, { Component } from 'react'
      import './index.css'
      
      /**
       * 【祖组件】与【后代组件】间通信
       */
      
      // 创建Context容器对象:
      const MyContext = React.createContext()
      const {Provider,Consumer} = MyContext
      
      export default class A extends Component {
          state = {name:'sun',age:18}
          render() {
              const {name,age} = this.state;
              return (
                  <div className='one'>
                      <h5>A组件</h5>
                      <div>我的名字是:{name}</div>
                      {/* 渲染子组件时,外面包裹Provider,通过value属性给后代组件传递参数 */}
                      <Provider value={{name,age}}>
                          <B></B>
                      </Provider>
                      
                  </div>
              )
          }
      }
      
      class B extends Component {
          render() {
              return (
                  <div className='two'>
                      <h5>B组件</h5>
                      <C></C>
                  </div>
              )
          }
      }
      
      /**
       * 后代组件读取数据
       * 方式一:仅使用于类组件
       */
      class C extends Component {
          // 第一步:声明接受context
          static contextType = MyContext;
          render() {
              return (
                  <div className='three'>
                      <h5>C组件</h5>
                      {/* 第二步:读取context中的value数据 */}
                      <div>C组件从A组件拿到的名字是:{this.context.name}</div>        
                      <D></D>
                  </div>
              )
          }
      }
      
      /**
       * 后代组件读取数据
       * 方式二:函数组件与类组件都可以
       */
      function D(){
          return(
              <div className='four'>
                  <h5>D组件</h5>
                  <div>D组件从A组件拿到的名字是:
                      <Consumer>
                          {value => `${value.name},年龄是:${value.age}`}
                      </Consumer>
                  </div>
              </div>
          )
      }
      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      • 34
      • 35
      • 36
      • 37
      • 38
      • 39
      • 40
      • 41
      • 42
      • 43
      • 44
      • 45
      • 46
      • 47
      • 48
      • 49
      • 50
      • 51
      • 52
      • 53
      • 54
      • 55
      • 56
      • 57
      • 58
      • 59
      • 60
      • 61
      • 62
      • 63
      • 64
      • 65
      • 66
      • 67
      • 68
      • 69
      • 70
      • 71
      • 72
      • 73
      • 74
      • 75
      • 76

      样式文件:

      .one{
          width: 500px;
          background-color: red;
          padding: 20px;
      }
      .two{
          width: 90%;
          background-color: orange;
          padding: 20px;
      }
      .three{
          width: 90%;
          background-color: yellow;
          padding: 20px;
      }
      .four{
          width: 90%;
          background-color: green;
          padding: 20px;
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20

      运行效果:
      在这里插入图片描述

  • 相关阅读:
    webpack解析ol依赖的时候报错
    最详细的next国际化方案
    第二十三章 javascript请求方式Ajax
    Linux高可用(HA)集群keepalived基础概念
    Linux 网络编程 TCP/UDP编程
    不能创建第三个变量,实现两个数的交换
    Java+MySQL 基于Springboot的垃圾分类网站-计算机毕业设计
    一个基于.NET Core构建的简单、跨平台、模块化的商城系统
    8月19日PMP成绩,预计10月16日公布!附查询入口、流程
    特斯拉自动驾驶(FSD系统)简介
  • 原文地址:https://blog.csdn.net/S2763427717/article/details/134297715