react中组件间的通信

一、父传子

1.代码展示

import React, { useState } from 'react';function SonPage(props){ // 子组件const {msg} = propsreturn (<div>我是子组件 {msg}</div>)
}function App() { // 父组件const [msgText,setMsgText] = useState('父传子')return (<div className="App"><div>我是父组件</div><SonPage msg={msgText} /></div>);
}export default App;

2.代码说明

1.子组件名称命名采用大驼峰命名法;

2.<SonPage msg={msgText} />中的msg属性用来在子组件中获取父组件传递过来msgText,msgText是父组件传递过来的数据

3.在子组件中组件函数名中有个参数SonPage(props),所有父组件传递过来的数据都在该参数中

3.效果展示

二、子传父

1.代码展示

import React, { useState } from 'react';function SonPage(props){ // 子组件const {msg} = props // 解构:可以解构出传递过来的数据和方法const sonMsg = '子传父'return (<div>我是子组件 {msg}<button onClick={()=>props.getSonMsg(sonMsg)}>点击发送消息到父组件</button></div>)
}function App() { // 父组件const [msgText,setMsgText] = useState('父传子')const [sonMsgText,setSonMsgText] = useState('')function getSonMsg(sonMsg){setSonMsgText(sonMsg)}return (<div className="App"><div>我是父组件 {sonMsgText}</div><SonPage msg={msgText} getSonMsg={getSonMsg}/></div>);
}export default App;

2.代码说明

1.子传父就相当于父传子,只不过父传子传递的是数据,而子传父传递的是方法;

2.<SonPage msg={msgText} getSonMsg={getSonMsg}/>,同样需要在子组件标签上定义一个属性(getSonMsg)用于子组件中获取父组件传递过来的方法(getSonMsg),命名上一般要求以on开头代表传递方法,我这里没用on开头是便于理解;

3.在子组件中组件函数名中有个参数SonPage(props),所有父组件传递过来的数据和方法都在该参数中,所以可以通过props.getSonMsg()来触发到父组件中的方法(getSonMsg);

4.该方法就是用来获取子组件传递过来的参数,有个参数就是子组件传递过来的数据

(getSonMsg(sonMsg))

3.效果展示

三、兄弟之间数据通信

1.代码展示

import React, { useState } from 'react';function AItem(props){const { onGetDataA } = props;const [msgA] = useState('组件A的数据')return (<div>我是子组件A <button onClick={()=>onGetDataA(msgA)}>点击发送数据</button></div>)
}
function BItem(props){const { getMsgAText } = props;return (<div>我是子组件B {getMsgAText}</div>)
}function App() { // 父组件const [msgAText,setMsgAText] = useState()function getDataA(msgAText){setMsgAText(msgAText)console.log('msgAText',msgAText);}return (<div className="App"><div>我是父组件</div><AItem onGetDataA={getDataA}/><BItem getMsgAText={msgAText}/></div>);
}export default App;

2.代码说明

兄弟间的通信其实就是同时使用父传子和子传父;先是子传父,将A组件的数据传递给父组件,再是在父组件中将A组件传递过来的数据通过父传子传递给B组件

3.效果展示

四、隔代间的数据通信

1.代码展示

import React, { useState, useContext, createContext } from 'react';const MsgContext = createContext()function AItem() {return (<div><div>我是子组件A</div><BItem /></div>)
}
function BItem() {const fatherMsg = useContext(MsgContext)return (<div>我是孙子组件B {fatherMsg}</div>)
}function App() { // 父组件const fatherMsg = '父组件的数据'return (<div className="App"><MsgContext.Provider value={fatherMsg}><div>我是父组件</div><AItem /></MsgContext.Provider></div>);
}export default App;

2.代码说明

1.首先需要通过createContext创建上下文标签(MsgContext),命名需要采用大驼峰命名法;

2.需要在顶层组件中使用MsgContext.Provider标签,将子标签包裹起来;

3.在需要获取顶层组件数据的后代组件中使用useContext(MsgContext)钩子函数来获取;

4.隔代间的数据通信并不是说爷孙之间,而是有上下关系的组件,也就是不管隔了多少代,比如父子之间也是可以使用的;

5.所谓的顶层组件就是需要传递数据给后代组件的组件;

6.<MsgContext.Provider value={fatherMsg}>,除了fatherMsg是变量外都是固定写法,value属性是用于传递数据的属性

3.效果展示

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

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

相关文章

快速入门Jupyter notebook

快速入门 Jupyter notebook 一、前言&#xff08;一&#xff09;优点&#xff08;二&#xff09;特点&#xff08;三&#xff09;调用运行&#xff08;四&#xff09;新建 二、认识界面快捷键&#xff08;一&#xff09;三种模式&#xff08;1&#xff09;蓝色模式&#xff1a;…

【echarts】中如何设置曲线展示最新值、最大值、最小值

需要用到的属性&#xff1a;图表标注 series-line. markPoint 默认可以通过 type直接标注&#xff1a;‘min’ 最小值、‘max’ 最大值、‘average’ 平均值。 markPoint: {data: [{type: max},{type: min}]}如何展示最新值 如果要展示最新值得话&#xff0c;需要设置 标注…

ICMPv6与NDP

ICMP ICMPv6是 IPv6 的基础协议之一。 在 IPv6 报文头部中, Next Header 字段值为 58 则对应为 ICMPv6 报文。 ICMPv6报文用于通告相关信息或错误。 ICMP报文 Type字段:0-127表示差错消息,128-255表示信息消息。 ICMP消息类型 差错消息 差错消息用于报告在转发IPv6数据包过…

如何应对SQL注入攻击?

引言 在现今的网络世界中&#xff0c;安全性已成为至关重要的话题。SQL注入&#xff08;SQL Injection&#xff09;是一种常见且危险的网络攻击方式&#xff0c;攻击者通过向SQL查询中插入恶意代码来操控数据库&#xff0c;从而获取敏感信息或破坏数据。了解SQL注入的各种类型…

案例分析:人工智能在航空航天领域的应用

作者主页: 知孤云出岫 目录 作者主页:案例分析&#xff1a;人工智能在航空航天领域的应用引言人工智能在航空航天中的主要应用案例分析案例一&#xff1a;AI优化航天器设计案例二&#xff1a;AI辅助飞行安全——预测维护案例三&#xff1a;AI自动驾驶系统案例四&#xff1a;A…

Llama中模块参数大小

LLama2中&#xff0c;流程中数据大小的变换如下 Transformer模块 第一次输入&#xff0c;进行prefill&#xff0c;输入x维度为[1, 8, 4096] 1. 构建wq,wk,wv,wo,尺寸均为[4096,4096]&#xff0c; 与x点乘&#xff0c;得到xq, xk, xv 2. 构建KV cache&#xff0c; 尺寸为 [b…

【Spring Framework】使用XML配置文件定义Bean及其依赖注入方式

在 Spring Framework 中&#xff0c;使用 XML 配置文件来定义 Bean、配置依赖关系以及管理应用程序的行为是一个经典且有效的方法。尽管在现代开发中注解和 Java 配置&#xff08;基于 Java 的配置类&#xff09;正变得越来越流行&#xff0c;XML 配置依然在某些场景下具有其优…

【Maven学习】-2. POM讲解

文章目录 2. POM讲解2.1 POM.xml2.2 POM 结构1) modules2) parent3) properties4) dependency依赖范围 5) repository仓库分类 6) build自定义打包名字指定打包路径 7) 插件-pluginsmaven-compiler-pluginmaven-surefire-pluginmaven-jar-pluginmaven-install-pluginmaven-clea…

秋招突击——7/23——百度提前批面试准备和正式面试

文章目录 引言一面准备面试预演一1、讲一下hashcode()和equals()关系2、equals()和有什么区别3、讲一下重载和重写的区别4、讲一下深拷贝、浅拷贝的区别5、讲一下Java异常的基类&#xff0c;运行时异常举几个例子&#xff0c;什么情况下会出现&#xff1f;6、讲一下Java中线程的…

vue3+ts+vite+electron+electron-packager打包成exe文件

目录 1、创建vite项目 2、添加需求文件 3、根据package.json文件安装依赖 4、打包 5、electron命令运行 6、electron-packager打包成exe文件 Build cross-platform desktop apps with JavaScript, HTML, and CSS | Electron 1、创建vite项目 npm create vitelatest 2、添…

【C++】深度解析:用 C++ 模拟实现 list 类,探索其底层实现细节

目录 list介绍 list模拟实现 list 节点类 list 的迭代器 定义 构造函数 解引用 operator前置和--与后置和-- operator与operator! list 类 构造函数 begin()和end() 拷贝构造 erase() clear() 析构函数 insert push_back 和 push_front pop_back 和 pop_front…

Linux网络协议深度解析:从IP到TCP/IP堆栈

Linux网络协议深度解析是一个复杂而详细的主题&#xff0c;它涵盖了从基本的数据包传输到复杂的协议交互。以下是对"Linux网络协议深度解析&#xff1a;从IP到TCP/IP堆栈"这一主题的简要解析&#xff1a; IP协议&#xff08;Internet Protocol&#xff09; •作用:…

Leetcode—769. 最多能完成排序的块【中等】

2024每日刷题&#xff08;149&#xff09; Leetcode—769. 最多能完成排序的块 实现代码 class Solution { public:int maxChunksToSorted(vector<int>& arr) {int ans 0;int mx INT_MIN;for(int i 0; i < arr.size(); i) {mx max(arr[i], mx);if(mx i) {a…

力扣高频SQL 50题(基础版)第六题

文章目录 1378. 使用唯一标识码替换员工ID题目说明思路分析实现过程结果截图总结 1378. 使用唯一标识码替换员工ID 题目说明 Employees 表&#xff1a; ---------------------- | Column Name | Type | ---------------------- | id | int | | name | varchar | ------…

登顶官方热榜,“超级智能体创造营”一期获奖名单公开!

自超级智能体创造营活动7月11日上线以来&#xff0c;受到很多平台开发者的关注&#xff0c;很开心看到首期创造营聚集了诸多优秀的平台开发者&#xff0c;共同参与到主题创作中&#xff0c;提交了100 的创意智能体&#xff01; 经过官方伙伴历经多轮、多维度的专业评审&#x…

yarn安装electron时报错RequestError:socket hang up

安装electron时候&#xff0c;出现RequestError:socket hang up这样的错误&#xff0c;找了半天很多方式都是用旧淘宝源&#xff0c;导致根本安装不上去。 在项目的根目录下创建.npmrc文件&#xff0c;添加以下内容 # registryhttps://mirrors.huaweicloud.com/repository/np…

乐尚代驾八订单执行三

司机到达代驾终点&#xff0c;代驾结束了。结束代驾之后&#xff0c; – 获取额外费用&#xff08;高速费、停车费等&#xff09; – 计算订单实际里程&#xff08;实际与预估有偏差&#xff09; – 计算代驾实际费用 – 系统奖励 – 分账信息 – 生成最终账单 计算订单…

Meta发布Llama 3.1 405B模型:开源与闭源模型之争的新篇章

引言 在人工智能领域&#xff0c;开源与闭源模型之争一直是热点话题。近日&#xff0c;Meta发布了最新的Llama 3.1 405B模型&#xff0c;以其强大的性能和庞大的参数规模&#xff0c;成为了开源模型中的佼佼者。本文将详细介绍Llama 3.1 405B模型的性能、功能及其在开源领域的…

Java码农人生使用手册——数组

一、基本概念 数组可以看成是相同类型元素的一个集合。 1、数组的创建及初始化 注意&#xff1a; 静态初始化虽然没有指定数组的长度&#xff0c;但是编译器在编译时会根据{}内的元素个数来确定数组的长度。静态初始化时&#xff0c;{}中的数据必须与[]前的数据类型一致。静态…

DDoS 攻击下的教育网站防护策略

随着互联网的普及&#xff0c;教育网站成为学生和教师获取信息、进行在线学习的重要平台。然而&#xff0c;这些网站也成为了网络攻击的目标&#xff0c;尤其是分布式拒绝服务&#xff08;DDoS&#xff09;攻击。本文将探讨DDoS攻击对教育网站的影响&#xff0c;并提出一系列有…