• React hooks组件通信


    一、前言

    组件通信是React中的一个重要的知识点,下面列举一下 react hooks中常用的父子、跨组件通信的方法

    二、父子组件通信

    1)父组件传值给子组件

    子组件代码:

    //子组件
    const Child = ({ param1, param2 }) => {
      return <>父组件传递的参数:{param1},{param2}
    }
    
    • 1
    • 2
    • 3
    • 4

    param1param2 为子组件接收父组件的传参,父组件代码如下:

    父组件代码

    //父组件
    const Parent = () => {
      return 
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    运行效果

    在这里插入图片描述


    2)子组件传值给父组件

    子传父严格来讲还是父传子,父组件传递给子组件ref,子组件将想要暴露给父组件的值放在上面,然后父组件就可以使用其值:

    首先需要导入对应的模块包useImperativeHandleuseRef,forwardRef

    import React, { useRef, useImperativeHandle, useEffect, forwardRef } from 'react';
    
    • 1

    父组件代码

    //父组件
    
    const Parent = () => {//父组件
      const ref = useRef(); //ref
      useEffect(() => {
        console.log(ref)
      }, [])
      return (
        )
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    子组件代码

    //子组件
    const Child = forwardRef(({ },ref) => {
      useImperativeHandle(ref, () => ({
        data: '我是子组件'
      }));
      return <>我是子组件
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    运行后控制台输出

    {
    	"current": {
    		"data": "我是子组件"
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3)跨组件传值(父传孙子组件)

    跨组件传值我们页可以使用最开始介绍的父传子的方法,一层层的嵌套传递,例如:

    const Parent = () => {
      return 
    }
    //子组件
    const Child1 = ({ param1, param2 }) => {
      return 
    }
    //子子组件
    const Child2 = ({ param1, param2 }) => {
      return <>父组件传递的参数:{param1},{param2}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    但如果有更多层嵌套时,一层层的传递会显得很冗余和麻烦,所以我们可以使用context来解决这个问题。

    在项目目录创建一个context.js文件用于创建我们的context,代码如下:

    import { createContext } from 'react'
    const myContext = createContext(null)
    export default myContext
    
    • 1
    • 2
    • 3

    然后在我们组件文件中引入我们定义的myContext,并引入react对应包:

    import React, { useContext } from 'react';
    import myContext from './context'
    
    • 1
    • 2

    父组件代码

    const Parent = () => {
      //使用Provider传递值
      return { param1: "1", param2: "2" }}>
        
      
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    子组件和子子组件代码

    //子组件无需改动
    const Child1 = () => {
      return 
    }
    //子子组件
    const Child2 = () => {
      //通过useContext获取父组件的值
      const { param1, param2 } = useContext(myContext)  
      return <>父组件传递的参数:{param1},{param2}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

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


    先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

  • 相关阅读:
    【每日一题】535. TinyURL 的加密与解密
    python科研绘图:面积图
    后缀数组学习笔记 - 更新ing
    创建镜像发布到镜像仓库【不依赖docker环境】
    赛事重启!第五届“强网”拟态防御国际精英挑战赛重磅归来!
    大语言模型LLM知多少?
    Flink1.14 Source概念入门讲解与源码解析
    Python威布尔分布
    【SpringCloud】Gateway网关入门
    Reset信号如何同步?
  • 原文地址:https://blog.csdn.net/m0_66557301/article/details/126113974