zoukankan      html  css  js  c++  java
  • react跨组件通信

    在react没有类似vue中的事件总线来解决这个问题,一是我们借助它们共同的父级组件通过代理的方式来实现,但过程会相当繁锁。react提供了Context来实现跨组件通信, 而不必显式地通过组件树的逐层传递 props。

    import React, { Component, createContext } from 'react'

     

    const {

      Provider,

      Consumer

    } = createContext()

    祖先与子孙之间的通信

     

     组件节点

    import React, { Component } from 'react'
      import MyContext from '../context/Bus'
    import Cmp2 from './Cmp2'
    
    export default class Cmp1 extends Component {
    
     static contextType = MyContext
    
      state = {
        userinfo: {
          username: '张三',
          age: 20
        }
      }
    
      render() {
        return (
          <div>
            {/* 发布一个消息 父子向下N多层的传递 祖先与后代的关系 */}
          <MyContext.Provider value={this.state.userinfo}>
              <Cmp2 />
            </MyContext.Provider>
          </div>
        )
      }
    }

    子孙节点

    import React, { Component } from 'react'
    
    import MyContext from '../context/Bus'
    
    export default class Cmp2 extends Component {
      // 统一数据源中的 context中的参数据数据
      // static contextType = MyContext
    
      render() {
        // console.log(this.context)
        return (
          <div>
            {/* {this.context} */}
            {/* 消费一下 */}
            <MyContext.Consumer>
              {
                // 函数  参数就是你订阅的数据
                value => (
                  <div>
                    您的姓名为:{value.username}
                  </div>
                )
              }
            </MyContext.Consumer>
          </div>
        )
      }
    }

    Bus.js文件

    import React, { createContext } from 'react'
    
    const db = {
      user1: {
        username: '张三'
      },
      user2: {
        username: '李四'
      }
    }
    
    
    // 如果createContext中有参数值,则表示 Provider中的没有写value值
    //相当于value的默认值
    // 使用默认值,可以实现平级
    //  Bus强一点,强在有数据  比vuex弱很多,只能获取
    // export const MyContext = createContext(db.user1)
    
    const MyContext = createContext(db.user1)
    
    
    export {
      db,
      MyContext as default
    }
    右侧打赏一下 代码改变世界一块二块也是爱
  • 相关阅读:
    xfs(dm-3):please umount the filesystem and rectify the problem(s)
    解决 pcre-8.35 make[2]: *** [aclocal.m4] Error 127
    redis-4.0.6 编译安装
    nginx出错:rewrite or internal redirection cycle
    17个技巧
    go-fastdfs/go-fastdfs-web
    Win X86 时间同步
    关闭或启动linux防火墙后,docker启动容器报错问题解决方式
    Nginx 重定向 443
    Docker 容器和宿主机相互拷贝文件
  • 原文地址:https://www.cnblogs.com/ht955/p/14690759.html
Copyright © 2011-2022 走看看