react:组件通信

embedded/2024/9/22 22:40:32/

组件通信

父组件向子组件通信

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 (<divstyle={{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 (<divstyle={{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.ppmy.cn/embedded/115273.html

相关文章

flutter GetX 管理和处理依赖的生命周期与状态的方法列表

在 GetX 中&#xff0c;除了 Get.put() 和 Get.find() 这两个常用的依赖注入方法之外&#xff0c;还有其他的一些方法可以帮助我们管理和处理依赖的生命周期与状态。以下是一些常用的依赖管理方法以及它们的作用&#xff1a; 1. Get.lazyPut() 作用: Get.lazyPut() 是延迟注入…

Android 15 正式发布至 AOSP

Google官方宣布&#xff0c;将于近期发布了 Android 15&#xff0c;而在早些时候&#xff0c;Google已经将其源代码推送至 Android 开源项目 (AOSP)。未来几周内&#xff0c;Android 15 将在受支持的 Pixel 设备上正式推出&#xff0c;并将于今年晚些时候在三星、Honor、iQOO、…

每日学习一个数据结构-B+树

文章目录 什么是B树示意图B树的基本特点B树的优点B树的应用场 B树分裂和合并的机制节点分裂节点合并注意事项 什么是B树 B树是一种自平衡的树数据结构&#xff0c;广泛应用于数据库和操作系统的索引结构中&#xff0c;特别是在MySQL的InnoDB存储引擎中。它通过保持数据排序&am…

大数据-138 - ClickHouse 集群 表引擎详解3 - MergeTree 存储结构 数据标记 分区 索引 标记 压缩协同

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

Scikit-learn (`sklearn`) 教程

Scikit-learn (sklearn) 教程 Scikit-learn 是 Python 中最流行的机器学习库之一&#xff0c;提供了丰富的机器学习算法、数据预处理工具以及模型评估方法&#xff0c;广泛应用于分类、回归、聚类和降维等任务。 在本教程中&#xff0c;我们将介绍如何使用 Scikit-learn 进行…

Linux 动静态库

目录 一.静态库 1.理解静态库 a.什么是静态库&#xff1f; b.创建静态库的理论&#xff1f; 2.打包静态库 3.静态库的使用方法 a.头文件找不着 b.链接报错——库函数文件找不着 4.将静态库文件写到系统目录下 a.直接拷贝 b.建立软链接 二.动态库 1.什么是动态库&am…

Redis的一些通用指令

首先我们需要先连接客户端服务器&#xff0c;此时我们需要通过redis-cli和redis服务器进行交互&#xff0c;输入ping来确保通路的流畅 &#xff08;一&#xff09;get和set redis中最核心的两个命令就是get和set&#xff0c;get就是根据key来取出对应value&#xff0c;set就是把…

设计模式之组合模式例题

答案&#xff1a;C A 知识点&#xff1a;组合模式的意图&#xff1a;将对象组合成树型结构以表示“整体-部分”的层次结构&#xff0c;使得用户对单个对象和组合对象的使用具有一致性