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://www.mfbz.cn/a/869696.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

通信原理-实验六:实验测验

实验六 实验测验 一&#xff1a;测验内容和要求 测试需要完成以下几个步骤&#xff1a; 配置好以下网络图&#xff1b;占总分10%&#xff08;缺少一个扣一分&#xff09;根据下面图配置好对应的IP和网关以及路由等相关配置&#xff0c;保证设备之间连通正常&#xff1b;占总…

谷粒商城实战笔记-60-商品服务-API-品牌管理-效果优化与快速显示开关

文章目录 一&#xff0c;显示状态列改为switch开关二&#xff0c;监听状态改变 首先&#xff0c;把ESLint语法检查关掉&#xff0c;因为这个语法检查过于严格&#xff0c;在控制台输出很多错误信息&#xff0c;干扰开发。 在build目录下下webpack.base.conf.js中&#xff0c;把…

matlab实验:实验六MATLAB 数值计算与符号运算

题目1&#xff1a;&#xff08;线性方程组数值求解&#xff09; 1&#xff0e; 用不同的方法求解下面方程&#xff1a;&#xff08;方程原式参考 P369 实验 10&#xff0c;第 1 题&#xff09; 第 1 种&#xff0c;左除和求逆函数(inv) 第 2 种 &#xff0c; 用 符 号 运 算 的…

鸿蒙(HarmonyOS)自定义Dialog实现时间选择控件

一、操作环境 操作系统: Windows 11 专业版、IDE:DevEco Studio 3.1.1 Release、SDK:HarmonyOS 3.1.0&#xff08;API 9&#xff09; 二、效果图 三、代码 SelectedDateDialog.ets文件/*** 时间选择*/ CustomDialog export struct SelectedDateDialog {State selectedDate:…

数据结构和算法入门

1.了解数据结构和算法 1.1 二分查找 二分查找&#xff08;Binary Search&#xff09;是一种在有序数组中查找特定元素的搜索算法。它的基本思想是将数组分成两半&#xff0c;然后比较目标值与中间元素的大小关系&#xff0c;从而确定应该在左半部分还是右半部分继续查找。这个…

Hyperledger Fabric 网络体验 - 网络启动过程概览

进入fabric-samples/test-network目录&#xff0c;执行指令&#xff1a; ./network.sh up -i 2.5执行完指令能看到fabric已经启动。 作为第一次Fabric网络体验&#xff0c;网络启动主要包含三个操作&#xff0c;分别是生成配置文件、启动网络和操作网络。 配置文件 使用cr…

数驭未来,景联文科技构建高质大模型数据库

国内应用层面的需求推动AI产业的加速发展。根据IDC数据预测&#xff0c;预计2026年中国人工智能软件及应用市场规模会达到211亿美元。 数据、算法、算力是AI发展的驱动力&#xff0c;其中数据是AI发展的基石&#xff0c;中国的数据规模增长速度预期将领跑全球。 2024年《政府工…

部署jar包遇到“zip file closed”和“ JCE cannot authenticate the provider BC”

一&#xff1a;导致原因 1、是因为自己打包时使用的jdk8而后运行时使用的是jdk17&#xff0c;jdk版本不一致导致的文件类型异常 二&#xff1a;报错截图 三&#xff1a;解决问题 1、使用jdk几打包就使用jdk几运行&#xff0c;列如我使用的是jdk8打包&#xff0c;使用jdk8运行…

甲方怒斥!!!为什么媒体不按原稿发布?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 前几天执行了一个媒体邀约的项目&#xff0c;邀约媒体参会&#xff0c;以及活动现场一切都很顺利&#xff0c;稿件同步的很晚&#xff0c;但还是让几个媒体连夜进行了刊登报道&#xff0…

MySQL作业五

1. 创建表goods&#xff0c;orders 2. 向商品表中插入商品记录 3. 触发器操作 3.1 建立触发器&#xff0c;订单表中增加订单数量后&#xff0c;商品表商品数量同步减少对应的商品订单出数量,并测试 3.2 建立触发器&#xff0c;实现功能:客户取消订单&#xff0c;恢复商品表对应…

五、工厂方法模式

文章目录 1 基本介绍2 案例2.1 Drink 抽象类2.2 Tea 类2.3 Coffee 类2.4 DrinkFactory 抽象类2.5 TeaFactory 类2.6 CoffeeFactory 类2.7 Client 类2.8 Client 类运行结果2.9 总结 3 各角色之间的关系3.1 角色3.1.1 Product ( 抽象产品 )3.1.2 ConcreteProduct ( 具体产品 )3.1…

如何开启或者关闭 Windows 安全登录?

什么是安全登录 什么是 Windows 安全登录呢&#xff1f;安全登录是 Windows 附加的一个组件&#xff0c;它可以在用户需要登录的之前先将登录界面隐藏&#xff0c;只有当用户按下 CtrlAltDelete 之后才出现登录屏幕&#xff0c;这样可以防止那些模拟登录界面的程序获取密码信息…

【Apache Doris】数据副本问题排查指南

【Apache Doris】数据副本问题排查指南 一、问题现象二、问题定位三、问题处理 本文主要分享Doris中数据副本异常的问题现象、问题定位以及如何处理此类问题。 一、问题现象 问题日志 查询报错 Failed to initialize storage reader, tablet{tablet_id}.xxx.xxx问题说明 查…

SSD基本架构与工作原理

SSD的核心由一个或多核心的CPU控制器、DRAM缓存以及多个NAND闪存芯片组成。CPU控制器负责管理所有读写操作&#xff0c;并通过DRAM缓存存储映射表等元数据&#xff0c;以加速寻址过程。 NAND闪存则是数据存储的实际介质&#xff0c;其组织结构从大到小依次为通道&#xff08;包…

Springboot项目远程部署gitee仓库(docker+Jenkins+maven+git)

创建仓库 创建一个Springboot项目&#xff0c;勾选web将该项目创建git本地仓库&#xff0c;再创建远程仓库推送上去 创建TestController RestControllerRequestMapping("/test")public class TestController {GetMapping("/hello")public String sayHell…

LeetCode 热题 HOT 100 (001/100)【宇宙最简单版】

【链表】 No. 0160 相交链表 【简单】&#x1f449;力扣对应题目指路 希望对你有帮助呀&#xff01;&#xff01;&#x1f49c;&#x1f49c; 如有更好理解的思路&#xff0c;欢迎大家留言补充 ~ 一起加油叭 &#x1f4a6; 欢迎关注、订阅专栏 【力扣详解】谢谢你的支持&#x…

【系统架构设计 每日一问】四 如何对关系型数据库及NoSql数据库选型

根据不同的业务需求和场景&#xff0c;选择适合的数据库类型至关重要。以下是一个优化后的表格展示&#xff0c;涵盖了管理型系统、大流量系统、日志型系统、搜索型系统、事务型系统、离线计算和实时计算七大类业务系统的数据库选型建议。先明确下NoSQL的分类 NoSQL数据库分类…

RabbitMQ_基础篇

文章目录 第一章 消息中间件1.1 应用场景1.2 常用消息中间件1.2.1 ActiveMQ1.2.2 RabbitMQ1.2.3 RocketMQ1.2.4 Kafka 第二章 RabbitMQ2.1 为什么选择RabbitMQ2.2 RabbitMQ简介2.3 RabbitMQ架构2.4 RabbitMQ工作模式2.4.1 Hello World2.4.2 Work Queues2.4.3 Publish/Subscribe…

分离式网络变压器的集成化设计替代传统网络变压器(网络隔离滤波器)尝试

Hqst盈盛&#xff08;华强盛&#xff09;电子导读&#xff1a;今天分享的是应用了分离式网络变压器设计的的新型网络变压器&#xff08;网络隔离变压器&#xff09; 今天我们一起来看这款新型网络变压器&#xff0c;它就是应用分离式网络变压器集成到电路板上&#xff0c;加上外…