React基础之组件通信

组件嵌套

父子传值实现

实现步骤

1.父组件传递数据-在子组件标签上绑定属性

2.子组件接收数据-子组件通过props参数接收数据

import React, { useRef, useState } from 'react';

//父传子

//1.父组件传递数据,需要在子组件标签上绑定数据

//2.子组件接收数据 props的参数

function Son(props){

  //props对象中包含了父组件中传递的所有数据

  console.log(props);

  return <div>this is Son {props.name},jsx:{props.child}</div>

}

function App() {

  const name='this is app'

  return (

    <div>

    <Son

    name={name}

    age={18}

    isTrue={false}

    list={['vue','React']}

    obj={{name:'jack'}}

    cb={()=>{console.log('111');}}

    child={<span>this is span</span>}

    ></Son>

    </div>

  );

}

export default App;

props的说明

props中可以传递任何数据

props是只读对象

子组件只能读取props中的数据,而不能直接修改父组件的数据

特殊的prop children

当我们把内容签到到子组件标签中,父组件回自动在名为children的props属性中接收该内容

import React, { useRef, useState } from 'react';

function Son(props){

  return <div>this is son ,{props.children}</div>

}

function App() {

  const name='this is app'

  return (

    <div>

    <Son>

      <span>this is span</span>

    </Son>

    </div>

  );

}

export default App;

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

子传父

在子组件中调用父组件中的函数并传递参数

import React, { useRef, useState } from 'react';

function Son({onGetSonMsg}){

  const sonMsg='this is son msg'

  return(

    <div>

      this is son<button onClick={()=>onGetSonMsg(sonMsg)}>{sonMsg}</button>

    </div>

  )

}

function App() {

 const [msg,setMsg]= useState('')

  const getmsg=(msg)=>{

    console.log(msg);

    setMsg(msg)

  }

  const name='this is app'

  return (

    <div>

      this is app,{msg}

    <Son

      onGetSonMsg={getmsg}

    >

    </Son>

    </div>

  );

}

export default App;

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

兄弟组件之间的数据传递

使用状态提升实现兄弟组件通信,A通过子传父将数据传入到父组件,然后在由父组件的父传子给子组件

import React, { useRef, useState } from 'react';

function A({onGetAName}){

  const name='this is A name'

  return(

    <div>

      this is A

      <button onClick={()=>onGetAName(name)}>send</button>

     

      </div>

 

  )

}

function B({name}){

  return(

    <div>this is B,

      {name}

    </div>

  )

}

function App() {

  const [name,setName]=useState('')

const getAname=(name)=>{

  console.log(name);

  setName(name)

}

  return (

    <div>

      this is App

      <A onGetAName={getAname}/>

      <B name={name}/>

    </div>

  );

}

export default App;

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

使用context机制跨层组件通信

1.使用createContext方法创建上下文对象Ctx

2.在顶层组件App中通过Ctx.Provider组件提供数据

3.在底层组件B中使用useContext钩子函数获取消费数据

import React, { createContext, useContext, useRef, useState } from 'react';

const MsgContext=createContext()

function A(){

  return(

    <div>

      this is App

      <B/>

    </div>

  )

}

function B(){

  const msg=useContext(MsgContext)

  return(

    <div>

      this is B,{msg}

    </div>

  )

}

function App() {

  const msg='this is app msg'

  return (

    <div>

      <MsgContext.Provider value={msg}>

         this is App

        <A/>

      </MsgContext.Provider>

     

    </div>

  );

}

export default App;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/31194.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UE5从入门到精通之如何创建自定义插件

前言 Unreal 的Plugins插件系统中有很多的插件供大家使用,包括官方的和第三方的,这些插件不仅能帮我我们实现特定功能,还能够提升我们的工作效率。 所以我们今天就来自己创建一个自定义插件,如果我们想实现什么特定的功能,我们也可以发布到商店供大家使用了。 创建插件 …

VSCode 2025最新 前端开发必备插件推荐汇总(提效指南)

&#x1f31f;前言: 如果你是一名前端开发工程师&#xff0c;合适的开发工具能大大提高工作效率。Visual Studio Code (VSCode) 凭借其轻量级、高扩展性的特点&#xff0c;已成为众多前端开发者在win系电脑的首选IDE。 名人说&#xff1a;博观而约取&#xff0c;厚积而薄发。—…

BGP实验(一)IBGP全互联配置

一、拓扑图 二、实验思路 根据BGP的路由优先原则&#xff0c;首先要保证路由可达。但是IBGP间存在水平分割机制&#xff0c;因此实验可使用IBGP全互联&#xff0c;反射器或联盟来实现IBGP间路由可达&#xff0c;本实验使用全互联全互联缺点&#xff1a;将BGP路由引入到IGP&…

查看和杀死进程线程

windows 任务管理器tasklist 查看进程taskkill 杀死进程 liunx ps -fe 查看所有进程ps -fT -p 查看某个进程pid 的所有线程kill 杀死进程kill -9 top 按大写H切换是否现实线程top -H -p 查看某个进程的的所有线程 java jps 查看所有Java进程jstack 查看某个Java进程pid 的所…

SpringBoot(一)--搭建架构5种方法

目录 一、⭐Idea从spring官网下载打开 2021版本idea 1.打开创建项目 2.修改pom.xml文件里的版本号 2017版本idea 二、从spring官网下载再用idea打开 三、Idea从阿里云的官网下载打开 ​编辑 四、Maven项目改造成springboot项目 五、从阿里云官网下载再用idea打开 Spri…

Vue Diff算法原理深度解析:如何高效更新虚拟DOM?

文章目录 1. 为什么需要Diff算法&#xff1f;2. Diff算法核心原则3. 核心流程图解4. 核心代码实现&#xff08;简化版&#xff09;5. Key的重要性示例6. 算法优化策略7. 时间复杂度优化8. 与其他框架的对比9. 总结 1. 为什么需要Diff算法&#xff1f; 在Vue的响应式系统中&…

【QT】简易小六壬起卦器 遇事不决 六壬决断

整点有意思的&#xff0c;用qt写了个简易小六壬起卦器。 一天不超过三次&#xff0c;占卜前提 不诚不占&#xff0c; 不疑不占&#xff0c; 不义不占 心血来潮时获取当时起卦结果。 不多说&#xff0c;直接上源码。 #pragma once#include "DADMPCoreExportLib.h" …

数学 二次函数

二次函数 就是计算一个抛物线。 抛物线的基本公式&#xff1a; 重点中的重点就是解决&#xff1a; &#xff08;开口方向&#xff1a; 对称轴&#xff0c;顶点&#xff0c;交点&#xff09; 这里的 y 和 x 就是 这个抛物线的个个点的坐标连成的线。 a 的正负 决定和大小决定…

Python匿名函数与面向对象编程核心解析:从lambda到继承多态全掌握

目录 前言一、匿名函数二、面向对象2.1 语言发展2.2 面向对象和面向过程2.2.1 面向过程2.2.2 面向对象2.3 面向对象的技术点二、类的使用三、实例化对象四、访问方法4.1 可以删除、修改、添加类的属性4.2 内置函数访问属性&#xff1a;五、内置类属性六、类的继承6.1 单继承6.2…

Node.js入门笔记2---下载安装Node.js

Node.js入门笔记2 Node.js下载并安装的步骤1.Node.js 环境的安装2. 区分 LTS 版本和 Current 版本的不同3.项目node管理版本工具4.Node.js 包管理工具5.MSI与ZIP文件格式的主要区别6. 选择好上面的内容&#xff0c;点击下载mis7. 环境配置 Node.js下载并安装的步骤 1.Node.js …

【阿里云】控制台使用指南:从创建ECS到系统诊断测评

前言 随着云计算技术的快速发展&#xff0c;越来越多的企业和开发者开始使用云服务来部署和管理应用程序。在众多云服务提供商中&#xff0c;阿里云&#xff08;Alibaba Cloud&#xff09;凭借其强大的基础设施和丰富的服务&#xff0c;成为了众多用户的首选。本文旨在介绍如何…

【Linux内核系列】:深入理解缓冲区

&#x1f525; 本文专栏&#xff1a;Linux &#x1f338;作者主页&#xff1a;努力努力再努力wz ★★★ 本文前置知识&#xff1a; 文件系统以及相关系统调用接口 输入以及输出重定向 那么在此前的学习中&#xff0c;我们了解了文件的概念以及相关的系统调用接口&#xff0c;并…

21.HarmonyOS Next CustomSlider组件步长控制教程(三)

温馨提示&#xff1a;本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦&#xff01; 文章目录 1. 步长控制概述2. 步长基本概念2.1 什么是步长&#xff1f;2.2 步长的作用 3. 设置步长3.1 基本参数3.2 代码示例 4. 步长与范围的关系4…

如何安装mitmproxy需要的证书(CA)

双击所需要安装的证书。 这里我就为整个计算机安装证书了&#xff0c;当然也可以只为自己安装。 接着就一路下一步&#xff0c;直到需要你输入密码这一块。 这里需要知道 CA 的密码。 我这里以 mitmproxy 需要的 CA 为例。官网上写明了是需要 Blank&#xff0c;所以就直接下一…

【Linux系统编程】基本IO函数

目录 1、open 函数2、create 函数3、write 函数4、read 函数5、lseek 函数6、access 函数7、unlink 函数8、remove 函数9、fcntl 函数写锁互斥锁示例读锁共享锁示例 1、open 函数 头文件 #include<sys/types.h> #include<sys/stat.h>#include<fcntl.h>…

Rancher证书到期致使平台无法浏览故障解决

1、修改系统时间&#xff0c;停止时间滚动更新。 # 关闭ntp同步&#xff0c;防止时间自动更新回来 timedatectl set-ntp false # 修改节点时间 timedatectl set-time 2020-07-01 00:00:00 2、重启容器。 #获取容器ID rancher_server_iddocker ps -a|grep -v CONTAINER|awk {…

tcc编译器教程6 进一步学习编译gmake源代码

本文以编译gmake为例讲解如何使用tcc进行复杂一点的c代码的编译 1 简介 前面主要讲解了如何编译lua解释器,lua解释器的编译很简单也很容易理解.当然大部分c语言程序编译没那么简单,下面对前面的gmake程序进行编译. 2 gmake源码结构 首先打开之前tcc-busybox-for-win32\gmak…

数据库基本建表操作

1.登录数据库并创建数据库db_ck 创建完成后使用到我们创建的数据库。 2.创建表t_hero 根据hero属性包括&#xff08;id&#xff0c;name&#xff0c;nickname&#xff0c;age&#xff0c;gender&#xff0c;address&#xff0c;weapon&#xff0c;types&#xff09; 创建完…

标准卷积(Standard Convolution)

标准卷积的基础操作图解&#xff1a; 卷积之后尺寸公式&#xff1a; 输入尺寸&#xff1a;WH卷积核尺寸&#xff1a;Fw​Fh​填充大小&#xff1a;P步长&#xff1a;S 输出尺寸 WoutHout可以通过以下公式计算&#xff1a; 其中[x]表示向下取整。 实例&#xff1a; 输入图像…

初阶数据结构习题【14】(4栈和队列)——225. 用队列实现栈

1. 题目描述 力扣在线OJ——225. 用队列实现栈 请你仅使用两个队列实现一个后入先出&#xff08;LIFO&#xff09;的栈&#xff0c;并支持普通栈的全部四种操作&#xff08;push、top、pop 和 empty&#xff09;。 实现 MyStack 类&#xff1a; void push(int x) 将元素 x …