11 React 组件通信 父传子

news/2024/11/8 6:10:18/

在React中实现组件通信是非常常见的需求,其中包括父子组件通信。以下是几种常见的父子组件通信的例子,以及需要注意的知识:

  1. Props传递
    这是最基本的父子组件通信方式。父组件通过props将数据传递给子组件。

    // ParentComponent.js
    import React from 'react';
    import ChildComponent from './ChildComponent';function ParentComponent() {const data = "Hello from Parent";return <ChildComponent data={data} />;
    }// ChildComponent.js
    import React from 'react';function ChildComponent(props) {return <div>{props.data}</div>;
    }
    

    注意事项:

    • Props是只读的,子组件不能直接修改props,只能由父组件传递。
    • 父组件通过props将数据传递给子组件,子组件通过props接收数据。
  2. 回调函数传递
    父组件通过props将回调函数传递给子组件,子组件调用该函数来与父组件通信。

    // ParentComponent.js
    import React, { useState } from 'react';
    import ChildComponent from './ChildComponent';function ParentComponent() {const [message, setMessage] = useState("");const handleMessage = (msg) => {setMessage(msg);};return (<div><ChildComponent handleMessage={handleMessage} /><p>Message from Child: {message}</p></div>);
    }// ChildComponent.js
    import React from 'react';function ChildComponent(props) {const handleClick = () => {props.handleMessage("Hello from Child");};return <button onClick={handleClick}>Send Message</button>;
    }
    

    注意事项:

    • 父组件通过回调函数的形式将能够修改父组件状态的方法传递给子组件。
    • 子组件调用该回调函数来通知父组件发生了某些事件或状态变化。
  3. Context API
    React的Context API允许您在组件树中传递数据,而无需在每个层级手动传递props。

    // MyContext.js
    import React from 'react';const MyContext = React.createContext();export default MyContext;// ParentComponent.js
    import React from 'react';
    import ChildComponent from './ChildComponent';
    import MyContext from './MyContext';function ParentComponent() {return (<MyContext.Provider value="Hello from Context"><ChildComponent /></MyContext.Provider>);
    }// ChildComponent.js
    import React, { useContext } from 'react';
    import MyContext from './MyContext';function ChildComponent() {const data = useContext(MyContext);return <div>{data}</div>;
    }
    

    注意事项:

    • Context API适用于在组件树中传递全局数据,但在小型应用中不建议滥用。
    • 可以在整个组件树中访问Context提供的值,而不需要手动将props逐层传递给每个子组件。

在实现组件通信时,需要注意以下几点:

  • 父子组件之间的通信应该保持单向数据流,即父组件向子组件传递数据或回调函数,而不是相反。
  • 避免直接修改props,props应该被视为不可变的。
  • 使用适当的方法传递数据,如Props传递、回调函数、Context API等,根据具体场景选择合适的方式。
  • 尽量将通信逻辑封装在组件内部,使组件更加可重用和独立。

http://www.ppmy.cn/news/1394666.html

相关文章

Polar 2024春季个人挑战赛 Jay17 WP

Polar 2024春季个人挑战赛 Rank&#xff1a;7 【WEB】机器人 开题 起手敏感文件robots.txt 【WEB】PHP反序列化初试 最简单的php反序列化 POC&#xff1a; <?php class Easy{public $name;public function __wakeup(){echo $this->name;} } class Evil{public $evi…

nodejs+vue高校洗浴管理系统python-flask-django-php

高校洗浴管理系统采用数据库是MySQL。网站的搭建与开发采用了先进的nodejs进行编写&#xff0c;使用了express框架。该系统从两个对象&#xff1a;由管理员和学生来对系统进行设计构建。主要功能包括&#xff1a;个人信息修改&#xff0c;对学生管理、浴室信息、浴室预约、预约…

Windows11 使用 VirtualBox 安装创建 Ubuntu虚拟机

〇、背景 开发者大比例习惯都是Windows下编辑代码&#xff0c;比如使用Windows的Visual Studio Code进行代码的开发。但不管是AOSP还是鸿蒙开发&#xff0c;目前都不支持windows本地环境编译的&#xff0c;建议使用Ubuntu操作系统环境对源码进行编译。 因此&#xff0c;没有U…

【Web】NKCTF 2024 个人wp(部分)

目录 my first cms 全世界最简单的CTF attack_tacooooo 属实太菜了&#xff0c;3/4 my first cms 一眼搜版本2.2.19 CVE -CVE-2024-27622 GitHub - capture0x/CMSMadeSimple 访问/admin/login.php 爆出弱口令&#xff0c;后台登录 admin Admin123 Extensions > User D…

蓝桥杯每日一题(拓扑排序)

//3696构造有向无环图 有向无环图才有拓扑排序&#xff0c;有环的话不能进行拓扑&#xff0c;因为会导致环中一个结点&#xff08;环的入口位置&#xff09;其入度永远无法变成0。 先判断图是否可拓扑序&#xff0c;如果本来就不能就直接No&#xff0c;可以的话。可以按照拓扑…

Open CASCADE学习|显示文本

目录 1、修改代码 Viewer.h&#xff1a; Viewer.cpp&#xff1a; 2、显示文本 OpenCasCade 你好啊 霜吹花落 1、修改代码 在文章《Open CASCADE学习|显示模型》基础上&#xff0c;增加部分代码&#xff0c;实现对文本显示的支持&#xff0c;具体如下&#xff1a; Viewer…

Rancher(v2.6.3)——Rancher部署Nginx(单机版)

Rancher部署Nginx详细说明文档&#xff1a;https://gitee.com/WilliamWangmy/snail-knowledge/blob/master/Rancher/Rancher%E4%BD%BF%E7%94%A8%E6%96%87%E6%A1%A3.md#5rancher%E9%83%A8%E7%BD%B2nacos ps&#xff1a;如果觉得作者写的还行&#xff0c;能够满足您的需求&#x…

kubenetes-Dashboard

kubenetes-Dashboard kubenetes-Dashboard1、部署和访问 Kubernetes 仪表板&#xff08;Dashboard&#xff09;1.1、dashboard 仪表板 2、安装dashboard1.下载2.启动dashboard3.在浏览器里访问&#xff0c;使用https协议去访问授权kubernetes-dashboard,防止找不到namespace资源…