React间的组件通信

一、父传子(props)

步骤

  1. 父组件传递数据,子组件标签身上绑定属性
  2. 子组件接收数据,props的参数

// 子组件
function Son(props) {return (<div>this is Son, {props.name}</div>)
}// 父组件
function App() {const name = "appName"return (<div><Son name={name}></Son></div>);
}export default App;

说明

  1. props可以传递任意的数据
  2. props是只读对象:子组件只能读取props中的数据,不能直接进行修改,父组件的数据只能由父组件修改

二、子传父

实现:子组件调用父组件的方法传参

// 子组件:结构赋值
function Son({sendMsg}) {const msg = "this is son msg";return (<div>this is Son<button onClick={() => sendMsg(msg)}>发送</button></div>)
}// 父组件
function App() {const getMsg = (msg) => {console.log("app get msg is" + msg)}return (<div><Son sendMsg={getMsg}/></div>);
}export default App;


三、兄弟组件(状态提升)

实现:通过共同的父组件进行兄弟组件之间的数据传递

步骤

  1. A组件先通过子传父的方式把数据传给父组件App
  2. App拿到数据后通过父传子的方式再传递给B组件
import {useState} from "react";// A组件:子传父
function A({sendMsg}) {const msg = "this is son msg";return (<div>this is son A<button onClick={() => sendMsg(msg)}>发送</button></div>)
}// B组件
function B({msg}) {return (<div>this son B<p>{msg}</p></div>)
}// 父组件
function App() {const [msg, setMsg] = useState();const getMsg = (msg) => {setMsg(msg)}return (<div>this App<A sendMsg={getMsg}></A><B msg={msg}></B></div>);
}export default App;

四、跨层级(Context机制)

实现步骤

  1. 使用createContext方法创建一个上下文对象Ctx
  2. 在顶层组件(App)中通过Ctx.Provider组件提供数据
  3. 在底层组件(B)中通过useContext钩子函数获取消费数据
import {createContext, useContext} from "react";// 层级关系:App -> A -> B
// 1. 使用createContext方法创建一个上下文对象Ctx
const MsgContext = createContext();// A组件
function A() {return (<div>this is A<B></B></div>)
}// B组件
function B() {// 3. 在底层组件(B)中通过useContext钩子函数获取消费数据const msg = useContext(MsgContext)return (<div>this is B,{msg}</div>)
}// 父组件
function App() {const msg = "this is app msg";return (<div>{/* 2. 在顶层组件(App)中通过Ctx.Provider组件提供数据 */}<MsgContext.Provider value={msg}>this App<A /></MsgContext.Provider></div>);
}export default App;

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

数字看板:跨行业需求下的创新与升级

在当今这个数据驱动的时代&#xff0c;数字看板作为信息展示与决策支持的重要工具&#xff0c;正逐步渗透到各行各业之中。从智慧城市到智能制造&#xff0c;从金融分析到医疗健康&#xff0c;数字看板以其直观、动态、高效的特点&#xff0c;成为了连接数据与决策者的桥梁。本…

keil调试SH79F7416

仿真器JET51A, 调试设置 选择器件 再次点击调试就一切正常啦

在同一台linux服务器上安装2+个mysql服务

1. 制作第二个mysql配置文件my.13306.cnf 如下面的配置。请注意&#xff1a;下面的端口&#xff0c;和路径相关的参数&#xff0c;需要和第一个mysql的配置重合&#xff0c;除了basedir参数&#xff0c;该参数是mysql安装的根路径。 [mysqld] group_concat_max_len 102400 u…

2024年Python3.12.0安装+激活+配置教程,保姆级教学,学好Python的第一步!

目录 Python下载 一.安装步骤 二.软件测试 三.环境配置 附赠《2024年最新Python免费电子书&#xff0c;知识点源码资料》→戳这里 Python下载 Python安装包&Pycharm安装包&#xff0c;永久激活码以打包好&#xff0c;需要的朋友可以直接扫下方CSDN官方认证的安全二维码…

前端学习7——自学习梳理

​​​​​​jQuery 教程 | 菜鸟教程jQuery 教程 jQuery 是一个 JavaScript 库。 jQuery 极大地简化了 JavaScript 编程。 jQuery 很容易学习。 本章节的每一篇都包含了在线实例 通过本站的在线编辑器&#xff0c;你可以在线运行修改后的代码&#xff0c;并查看运行结果。 实例…

3.1、数据结构-线性表

数据结构 数据结构线性结构线性表顺序存储和链式存储区别单链表的插入和删除练习题 栈和队列练习题 串&#xff08;了解&#xff09; 数据结构 数据结构该章节非常重要&#xff0c;上午每年都会考10-12分选择题下午一个大题 什么叫数据结构&#xff1f;我们首先来理解一下什…

鸿蒙北向开发 DevEco Studio 4.1 下载安装傻瓜式教程

开篇 由于鸿蒙处于快速发展中,鸿蒙的api快速迭代更新,老版本的DevEco studio无法支持更新版本的api,因此华为官网放弃了老版本的维护.直接从华为开发者官网无法下载老版本,当前华为开发者官网已经推出next版本了 DevEco studio3.1安装教程 上述教程提供的华为开发者官网地址已经…

【MARL】MADDPG + attention 实现(+论文解读)

文章目录 前言注意力机制论文里的attention回顾知识-MADDPG讲解1.Q的定义2.Q的恒等式3.论文里的attention4.好处 实现 和 修改结果展示原论文代码 翻改版修改后原maddpg代码 前言 导师让在MADDPG上加一个注意力机制&#xff0c;试了很多种&#xff0c;下面的参考的论文的效果最…

AR 眼镜之-蓝牙电话-实现方案

目录 &#x1f4c2; 前言 AR 眼镜系统版本 蓝牙电话 来电铃声 1. &#x1f531; 技术方案 1.1 结构框图 1.2 方案介绍 1.3 实现方案 步骤一&#xff1a;屏蔽原生蓝牙电话相关功能 步骤二&#xff1a;自定义蓝牙电话实现 2. &#x1f4a0; 屏蔽原生蓝牙电话相关功能 …

【ffmpeg命令入门】视频剪切,倍速与倒放

文章目录 前言1. 视频剪切2. 视频倍速公式说明例子 3. 视频倒放总结 前言 在视频编辑中&#xff0c;剪切、倍速和倒放是常见的操作&#xff0c;能够帮助我们调整视频的长度、播放速度以及播放顺序。掌握 FFmpeg 命令中的相关参数和用法将使视频处理变得更加高效。在这篇文章中…

日本的便利店真的“无所不能”?!简直不要太方便了

众所周知&#xff0c;日本便利店可谓是日本人离不来的存在了&#xff01;真真是“要啥有啥”&#xff0c;可以说日本的便利店才是真正意义上的“便利”~ 那日本的便利店到底有什么与众不同呢&#xff1f;&#xff1f;今天小编来带大家盘点一下日本便利店的那些服务。 一、购票…

Redis:未授权访问

Redis Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的高性能键值对&#xff08;key-value&#xff09;数据库&#xff0c;支持多种类型的数据结构。 核心特性 内存存储&#xff1a;Redis将所有数据存储在内存中&#xff0c;能够提供极高的读写性能。 …

【Python面试题收录】Python编程基础练习题②(数据类型+文件操作+时间操作)

本文所有代码打包在Gitee仓库中https://gitee.com/wx114/Python-Interview-Questions 一、数据类型 第一题 编写一个函数&#xff0c;实现&#xff1a;先去除左右空白符&#xff0c;自动检测输入的数据类型&#xff0c;如果是整数就转换成二进制形式并返回出结果&#xff1b…

【知识图谱】深入理解 Cypher 查询语言中的查询

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

解锁人工智能学习中的数学密钥

一、启航&#xff1a;奠定数学基础 1. 线性代数&#xff1a;AI的入门语言 学习目标&#xff1a;掌握向量、矩阵的基本概念及运算&#xff0c;理解线性空间、线性变换及特征值、特征向量的意义。学习建议&#xff1a;从基础教材入手&#xff0c;如《线性代数及其应用》&#x…

vue3前端开发-小兔鲜项目-登录组件的开发表单验证

vue3前端开发-小兔鲜项目-登录组件的开发表单验证&#xff01;现在开始写登录页面的内容。首先这一次完成基础的首页按钮点击跳转&#xff0c;以及初始化一些简单的表单的输入验证。后期还会继续完善内容。 1&#xff1a;首先还是准备好login页面的组件代码内容。 <script …

巴黎奥运观赛AI新体验来了!通义App上线“赛事百事通”等多款新功能

巴黎奥运会期间&#xff0c;通义App上线赛事百事通、全民云运动、AI运动写真等多款新功能。这些新功能基于通义大模型打造&#xff0c;让国内体育迷们看奥运、聊奥运的同时&#xff0c;也能体验AI技术带来的观赛新体验。 据了解&#xff0c;打开通义App&#xff0c;进入“巴黎2…

每日OJ_牛客_求最小公倍数

目录 牛客_求最小公倍数 解析代码 牛客_求最小公倍数 求最小公倍数__牛客网 解析代码 最小公倍数 两数之积除以最大公约数&#xff0c;这里使用碾转相除法进行最大公约数的求解&#xff1a;即a与b的最大公约数可以转化为a、b之间的余数为两者之间最小的数之间的公约数。所以…

Linux云计算 |【第二阶段】AUTOMATION-DAY3

主要内容&#xff1a; Jenkins项目管理、构建分发服务器、自动化上线的案例部署 补充&#xff1a;yum与dnf只是做了快捷方式&#xff0c;用法一样 [rootnode1 ~]# ll /bin/yum lrwxrwxrwx. 1 root root 5 Feb 18 2020 /bin/yum -> dnf-3 [rootnode1 ~]# ll /bin/dnf lrwx…

deepseek-vl 论文阅读笔记

目录 一、已有模型性能差距分析 二、创新点 数据集构建 模型架构 训练策略 实验与评估 三、细节 数据构建 内部SFT数据的分类体系 模型架构 训练流程包括三个阶段 系统包含三个模块 混合视觉编码器 视觉-语言适配器 语言模型 训练策略 阶段一&#xff1a;训练…