react:组件通信

news2024/11/16 10:33:46

组件通信

父组件向子组件通信

function App() {
  return (
    <div>
      <div>这是父组件</div>
      <Child name="这是子组件" />
    </div>
  );
}

// 子组件
function Child(props) {
  return <div>{props.name}</div>;
}

在这里插入图片描述
props说明

  • props可以传递任意的数据,可以是数字、字符串、布尔值、数组、对象、函数、JSX
  • props是只读对象,只能读取props中的数据,不能直接进行修改,父组件的数据只能由父组件修改

特殊的prop children
当我们把内容嵌套在子组件标签中时,父组件会自动在名为childrenprop属性中接收该内容

function App() {
  return (
    <div>
      <div>这是父组件</div>
      <Child name="这是子组件">
        <span>把内容嵌套在标签中</span>
        <span>children属性</span>
      </Child>
    </div>
  );
}

// 子组件
function Child(props) {
  return (
    <div>
      {props.name}
      {props.children.map((item, index) => {
        return <div key={index}>{item}</div>;
      })}
    </div>
  );
}

在这里插入图片描述

子组件向父组件通信

核心思路:在子组件中调用父组件中的函数并传递参数

function App() {
  const [count, setCount] = useState(0);
  return (
    <div>
      <div>这是父组件</div>
      <div>当前数值是:{count}</div>
      <Child onGetMsg={(num) => setCount(num)}></Child>
    </div>
  );
}

// 子组件
function Child({ onGetMsg }) {
  const msg = 1;
  const sendMsg = () => {
    // 调用父组件方法,传递信息
    onGetMsg(msg);
  };
  return (
    <div>
      <button onClick={sendMsg}>发送消息</button>
    </div>
  );
}

兄弟组件通信

使用状态提升实现兄弟组件通信,通过父组件进行兄弟组件之间的数据传递。
A组件先通过子传父的方式把数据传给父组件,父组件拿到数据后再通过父传子的方式传递给B组件
在这里插入图片描述

function App() {
  const [msg, setMsg] = useState(0);
  return (
    <div
      style={{
        width: "500px",
        height: "300px",
        border: "1px solid red",
      }}
    >
      <div>父组件</div>
      <ChildA onGetMsg={(msg) => setMsg(msg)} />
      <ChildB aMsg={msg} />
    </div>
  );
}

// 子组件
function ChildA({ onGetMsg }) {
  const msg = "这是发给B组件的消息";
  const sendMsg = () => {
    // 调用父组件方法,传递信息
    onGetMsg(msg);
  };
  return (
    <div style={{ width: "200px", height: "100px", border: "1px solid green" }}>
      <div>子组件A</div>
      <button onClick={sendMsg}>发送消息</button>
    </div>
  );
}
function ChildB(props) {
  return (
    <div style={{ width: "200px", height: "100px", border: "1px solid blue" }}>
      <div>子组件B</div>
      <div>子组件A传递的信息是:{props.aMsg}</div>
    </div>
  );
}

在这里插入图片描述

跨层级组件通信

使用Context机制实现跨层级组件通信

  • 使用createContext方法创建一个上下文对象Ctx
  • 在顶层组件中通过Ctx.Provider组件提供数据
  • 在底层组件中通过useContext钩子函数获取数据
// 1、创建一个上下文对象
const MsgContext = createContext();

function App() {
  const msg = "跨层级传递数据";
  return (
    <div
      style={{
        width: "500px",
        height: "300px",
        border: "1px solid red",
      }}
    >
      <div>父组件</div>
      {/* 2、使用上下文对象,将数据传递给子组件 ,value是用来提供数据的*/}
      <MsgContext.Provider value={msg}>
        <Son />
      </MsgContext.Provider>
    </div>
  );
}

// 子组件
function Son() {
  return (
    <div style={{ width: "300px", height: "150px", border: "1px solid green" }}>
      <div>子组件</div>
      <Grandson />
    </div>
  );
}
function Grandson() {
  // 3、使用上下文对象,获取数据
  const msg = useContext(MsgContext);
  return (
    <div style={{ width: "200px", height: "100px", border: "1px solid blue" }}>
      <div>孙子组件</div>
      <div>顶层传递的数据是:{msg}</div>
    </div>
  );
}

在这里插入图片描述

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

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

相关文章

AWS 管理控制台

目录 控制台主页 AWS 账户信息 AWS 区域 AWS 服务选择器 AWS 搜索 AWS CloudShell AWS 控制面板小部件 控制台主页 注册新的 AWS 账户并登录后&#xff0c;您将看到控制台控制面板。这是与各种 AWS 服务以及其他重要控制台组件进行交互的起点。控制面板由页面顶部的导航…

初始Vitis——ZYNQ学习笔记1

一、Vitis是什么 Vitis 统一软件平台的前身为 Xilinx SDK&#xff0c;从 Vivado 2019.2 版本开始&#xff0c; Xilinx SDK 开发环境已统一整合到全功能一体化的 Vitis 中。 Vitis 开发平台除了启动方式、软件界面、使用方法与 SDK 开发平台略有区别&#xff0c;其他操作几乎一模…

Windows本地连接远程服务器并创建新用户详细记录

前提可知&#xff1a; &#xff08;1&#xff09;服务器IP地址&#xff1a;x.x.x.x &#xff08;2&#xff09;服务器名称&#xff1a;root&#xff08;一般默认为root&#xff0c;当然也有别的名称&#xff09; &#xff08;3&#xff09;服务器登陆密码&#xff1a;**** 一、…

计算机毕业设计之:基于微信小程序的校园流浪猫收养系统

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

Python类及元类的创建流程

Python类及元类的创建流程 代码运行结果再看type和object的关系和约定type和object具有的方法不一样看代码和运行结果&#xff0c;可以完全理解python的执行过程。再补充几点&#xff0c; 代码 class MetaCls(type):print(0>>>, MetaCls, 0)def __init__(self, name,…

13.面试算法-字符串常见算法题(二)

1. 字符串反转专题 我们知道反转是链表的一个重要考点&#xff0c;反转同样是字符串的重要问题。常见问题也就是在LeetCode中列举的相关题目&#xff1a; 【1】LeetCode344. 反转字符串&#xff1a;编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符…

【小沐学GIS】blender导入OpenStreetMap城市建筑(blender-osm、blosm)

文章目录 1、简介1.1 blender1.2 osm地图 2、OpenStreetMap下载方式2.1 Simple2.2 Overpass API2.3 OSM星球2.4 Geofabrik下载2.5 其他方法2.6 BBBike 3、blender-osm插件3.1 简介3.2 操作 结语 1、简介 1.1 blender https://www.blender.org/ Blender 是一款免费的开源 3D …

机器学习周报第五十七周 GATRes

文章目录 week56 HA-GNN摘要Abstract一、大数据相关1. 单机zookeeper2. 与hbase对接的技术2.1 使用hive操作hbase——直接与hbase对接&#xff08;非接口技术&#xff09;使用 pyhive 操作 Hive 2.2 mysql操作hbase&#xff08;非接口技术&#xff09;导出 HBase 数据到 MySQL导…

【技术调研】三维(7)-Unity基础笔记

安装 ​ 最好使用长期维护版本。 创建项目 ​ 略 窗口布局 Hierarchy:层级面板,展示当前打开的场景里面有哪些物体。 Scene:场景面板,显示当前场景的样子 Game:游戏面板,场景运行的时候的样子 Inspector:检视面板(或属性面板),查看一个游戏物体由哪些组件组成。 …

有关shell指令练习2

写一个shell脚本&#xff0c;将以下内容放到脚本中 在家目录下创建目录文件&#xff0c;dir dir下创建dir1和dir2 把当前目录下的所有文件拷贝到dir1中&#xff0c; 把当前目录下的所有脚本文件拷贝到dir2中 把dir2打包并压缩为dir2.tar.xz 再把dir2.tar.xz移动到dir1中 …

Golang | Leetcode Golang题解之第423题从英文中重建数字

题目&#xff1a; 题解&#xff1a; func originalDigits(s string) string {c : map[rune]int{}for _, ch : range s {c[ch]}cnt : [10]int{}cnt[0] c[z]cnt[2] c[w]cnt[4] c[u]cnt[6] c[x]cnt[8] c[g]cnt[3] c[h] - cnt[8]cnt[5] c[f] - cnt[4]cnt[7] c[s] - cnt[6]…

uni-app页面调用接口和路由(四)

文章目录 一、路由二、页面调用接口二、路由跳转1.uni.navigateTo(OBJECT)2.uni.redirectTo(OBJECT)3.uni.reLaunch(OBJECT)4.uni.switchTab(OBJECT)5.uni.navigateBack(OBJECT) 总结 一、路由 路由配置 uni-app页面路由为框架统一管理&#xff0c;开发者需要在pages.json里配…

VBA技术资料MF199:屏蔽单元格右键菜单复制剪切按钮

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

Matlab simulink建模与仿真 第十九章(生成C代码)

一、Configuration Parameters模型参数配置 1、仿真时间 &#xff08;1&#xff09;在Solver选项卡中可以设置仿真的起始时间和结束时间&#xff0c;一般起始时间设为0&#xff0c;而结束时间按需设置。 &#xff08;2&#xff09;如果希望仿真不会自动暂停&#xff08;也就…

通过springcloud gateway优雅的进行springcloud oauth2认证和权限控制

代码地址 如果对你有帮助请给个start&#xff0c;本项目会持续更新&#xff0c;目标是做一个可用的快速微服务开发平台&#xff0c;成为接私活&#xff0c;毕设的开发神器&#xff0c; 欢迎大神们多提意见和建议 使用的都是spring官方最新的版本&#xff0c;版本如下&#xff1…

通过UV快速计算品牌独立站网络流量

背景&#xff1a; 品牌独立站项目交付过程中&#xff0c;我们需要为客户提供“云资源” 成本报价&#xff0c;其中“计算资源” 及CPU、内存、存储 参数相对固定&#xff0c;而互联网网络成本需要进行评估报价&#xff0c;以海外TOP云平台 AWS、AZURE、GCP 为例都是以“不限带…

专业的屏幕录像和视频编辑的软件Camtasia 2024安装激活图文教程

‌Camtasia 2024是一款专业的屏幕录像和视频编辑的软件套装。它由TechSmith公司开发‌&#xff0c;提供了强大的屏幕录像、视频剪辑和编辑、视频菜单制作、视频剧场、视频播放等功能。 Camtasia Studio 2024是该软件套装的核心部分&#xff0c;支持在PC和Mac平台上运行&#xf…

SpringBoot3核心特性-核心原理

目录 传送门前言一、事件和监听器1、生命周期监听2、事件触发时机 二、自动配置原理1、入门理解1.1、自动配置流程1.2、SPI机制1.3、功能开关 2、进阶理解2.1、 SpringBootApplication2.2、 完整启动加载流程 三、自定义starter1、业务代码2、基本抽取3、使用EnableXxx机制4、完…

针对 Linux SSH 服务器的新攻击:Supershell 恶意软件危害易受攻击的系统

ASEC 研究人员发现了针对保护不善的 Linux SSH 服务器的新攻击。 在其中&#xff0c;黑客使用了用Go编写的 Supershell恶意软件。 该后门使攻击者能够远程控制受感染的系统。 初次感染后&#xff0c;黑客启动扫描仪来寻找其他易受攻击的目标。 据信这些攻击是使用从已受感…

构建高可用和高防御力的云服务架构:从DDoS高防到PolarDB

引言 随着互联网技术的飞速发展&#xff0c;网络环境已经成为我们日常生活和商业活动中不可或缺的一部分。然而&#xff0c;这种依赖也带来了新的挑战&#xff0c;尤其是在网络安全领域。其中&#xff0c;分布式拒绝服务&#xff08;DDoS&#xff09;攻击因其破坏性强、难以防…