”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何在 React 中将 props 从子组件传递到父组件

如何在 React 中将 props 从子组件传递到父组件

发布于2024-11-04
浏览:775

您可能一直在将 props 从父组件传递到子组件,并且您问自己:“嗯...但是如果我想将 props 从子组件传递给父组件怎么办?我的意思是...反过来?“, 正确的? ?我也曾问过自己这个问题,但其实是有解决办法的。

How to pass props from child to parent component in React

我们将详细介绍它们。

典型的道具流程是怎样的?

道具的典型流程是从父级到子级。基本上,假设您有一个如下所示的父组件:

How to pass props from child to parent component in React

我们下面的子组件使用了非常受欢迎的 shadcn/ui 组件库中的 Button 组件。 Button 组件有一个children 属性,它是从Parent 组件传递的。

How to pass props from child to parent component in React

上面,我们将一个 Children 属性从 Parent 组件传递给 Child 组件。到目前为止一切都很好,对吗?

如果我们想将道具从孩子传递给父母怎么办?

现在,事情变得有点棘手,特别是如果这是您第一次实现这样的逻辑。棘手的部分可能不在于如何去做,而在于如何将其可视化。不管怎样,我去过那里,我的经验希望对你有帮助?

How to pass props from child to parent component in React

因为学习最好是通过实践来完成,所以让我们引用之前的示例,并对其进行一些修改,以了解如何将道具从子级传递给父级。此示例的目标是展示如何通过从子组件传递数据来修改父组件的状态。

How to pass props from child to parent component in React

这是我们在子组件中所做的事情:

How to pass props from child to parent component in React

为了让书面形式更容易理解,我们试图用两个组件完成的任务是初始化父组件中的状态,然后将变量传递给子组件,并更新相应的函数父组件中的状态值。在这种情况下,假设状态的值首先设置为 false。当我们单击子组件中的按钮时,它将获取该值,并在单击事件上调用函数时将其更改为 false 的相反值(!在值中否定它)。

将数据从子级传递给父级时的常见陷阱

将数据从子组件传递到父组件确实有其怪癖。最常见的陷阱之一是忘记将回调函数作为 prop 传递给子组件,但这也意味着您传递了更多需要传递的逻辑。这可能会导致更烦人且更难以调试的错误。

How to pass props from child to parent component in React

防止这种情况的一种方法是使用 useCallback 钩子,它确保您作为回调传递给子组件的函数在渲染过程中保持稳定,从而防止不必要的重新渲染并提高性能。 useCallback 的情况是,您将一个函数作为 prop 传递给子组件,子组件将有权访问该函数,并可以在需要时调用它。让我们看看如何做到这一点。

How to pass props from child to parent component in React

现在让我们展示一下它在子组件中的样子:

How to pass props from child to parent component in React

这不是比传递函数,然后从子函数更新它,然后再次传递给父函数更干净吗?更干净,也更容易实施,对吗? ?

感谢您的阅读!

尽管在 React 中肯定有更多、甚至可能更干净、更好看的方式将数据从子级传递到父级,但我希望在阅读我的文章后,您会发现更容易理解数据传递的流程从孩子到父母,以及如何用两种不同的方式来实现这一点。谁知道呢,也许您自己会找到一种更有创意的方法呢? ?如果是这样,我们将不胜感激在评论中解释您的想法!

关于作者

我是一名居住在葡萄牙的软件开发人员和技术作家。我对软件工程充满热情?‍?我喜欢在日常生活中探索新工具,并为常见的业务和技术问题找到有趣且富有创意的解决方案。你可以在 GitHub 上找到我。如果您有任何问题或反馈,请随时与我们联系! ?

版本声明 本文转载于:https://dev.to/bcostaaa01/how-to-pass-props-from-child-to-parent-component-in-react-1ci4?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 如何在 PHP 中组合两个关联数组,同时保留唯一 ID 并处理重复名称?
    如何在 PHP 中组合两个关联数组,同时保留唯一 ID 并处理重复名称?
    在 PHP 中组合关联数组在 PHP 中,将两个关联数组组合成一个数组是一项常见任务。考虑以下请求:问题描述:提供的代码定义了两个关联数组,$array1 和 $array2。目标是创建一个新数组 $array3,它合并两个数组中的所有键值对。 此外,提供的数组具有唯一的 ID,而名称可能重合。要求...
    编程 发布于2024-12-31
  • 尽管代码有效,为什么 POST 请求无法捕获 PHP 中的输入?
    尽管代码有效,为什么 POST 请求无法捕获 PHP 中的输入?
    解决 PHP 中的 POST 请求故障在提供的代码片段中:action=''而不是:action="<?php echo $_SERVER['PHP_SELF'];?>";?>"检查 $_POST数组:表单提交后使用 var_dump 检查 $_POST 数...
    编程 发布于2024-12-31
  • 如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 识别今天生日的用户使用 MySQL 确定今天是否是用户的生日涉及查找生日匹配的所有行今天的日期。这可以通过一个简单的 MySQL 查询来实现,该查询将存储为 UNIX 时间戳的生日与今天的日期进行比较。以下 SQL 查询将获取今天有生日的所有用户: FROM USERS ...
    编程 发布于2024-12-31
  • 大批
    大批
    方法是可以在对象上调用的 fns 数组是对象,因此它们在 JS 中也有方法。 slice(begin):将数组的一部分提取到新数组中,而不改变原始数组。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index p...
    编程 发布于2024-12-31
  • 如何修复 macOS 上 Django 中的“配置不正确:加载 MySQLdb 模块时出错”?
    如何修复 macOS 上 Django 中的“配置不正确:加载 MySQLdb 模块时出错”?
    MySQL配置不正确:相对路径的问题在Django中运行python manage.py runserver时,可能会遇到以下错误:ImproperlyConfigured: Error loading MySQLdb module: dlopen(/Library/Python/2.7/site-...
    编程 发布于2024-12-31
  • 插入数据时如何修复“常规错误:2006 MySQL 服务器已消失”?
    插入数据时如何修复“常规错误:2006 MySQL 服务器已消失”?
    插入记录时如何解决“一般错误:2006 MySQL 服务器已消失”介绍:将数据插入 MySQL 数据库有时会导致错误“一般错误:2006 MySQL 服务器已消失”。当与服务器的连接丢失时会出现此错误,通常是由于 MySQL 配置中的两个变量之一所致。解决方案:解决此错误的关键是调整wait_tim...
    编程 发布于2024-12-31
  • Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta:列偏移的删除和恢复Bootstrap 4 在其 Beta 1 版本中引入了重大更改柱子偏移了。然而,随着 Beta 2 的后续发布,这些变化已经逆转。从 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    编程 发布于2024-12-31
  • 在 Go 中使用 WebSocket 进行实时通信
    在 Go 中使用 WebSocket 进行实时通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要一种比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSoc...
    编程 发布于2024-12-31
  • 除了“if”语句之外:还有哪些地方可以在不进行强制转换的情况下使用具有显式“bool”转换的类型?
    除了“if”语句之外:还有哪些地方可以在不进行强制转换的情况下使用具有显式“bool”转换的类型?
    无需强制转换即可上下文转换为 bool您的类定义了对 bool 的显式转换,使您能够在条件语句中直接使用其实例“t”。然而,这种显式转换提出了一个问题:“t”在哪里可以在不进行强制转换的情况下用作 bool?上下文转换场景C 标准指定了四种值可以根据上下文转换为的主要场景bool:语句:if、whi...
    编程 发布于2024-12-31
  • HTML 格式标签
    HTML 格式标签
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    编程 发布于2024-12-31
  • 如何在 Python 中检查 NaN(不是数字)?
    如何在 Python 中检查 NaN(不是数字)?
    检查 NaN(不是数字)在 Python 中,NaN(不是数字)由 float('nan') 表示。它用于表示无法表示为实数的值。要检查值是否为 NaN,请使用 math.isnan 函数。示例:import math x = float('nan') if math.isnan(x...
    编程 发布于2024-12-29
  • 如何在 React 中有条件地应用类属性?
    如何在 React 中有条件地应用类属性?
    在 React 中有条件地应用类属性在 React 中,根据从父组件传递的 props 来显示或隐藏元素是很常见的。为此,您可以有条件地应用 CSS 类。然而,当使用语法 {this.props.condition ? 'show' : 'hidden'} 直接在字符...
    编程 发布于2024-12-28
  • 如何在Java中执行系统命令并与其他应用程序交互?
    如何在Java中执行系统命令并与其他应用程序交互?
    Java 中运行进程在 Java 中,启动进程的能力是执行系统命令和与其他应用程序交互的关键功能。为了启动一个进程,Java提供了一个相当于.Net System.Diagnostics.Process.Start方法。解决方案:获取本地路径对于执行至关重要Java 中的进程。幸运的是,Java 的...
    编程 发布于2024-12-28
  • 如何在 C++ 中创建多行字符串文字?
    如何在 C++ 中创建多行字符串文字?
    C 中的多行字符串文字 在 C 中,定义多行字符串文字并不像 Perl 等其他语言那样简单。但是,您可以使用一些技术来实现此目的:连接字符串文字一种方法是利用 C 中相邻字符串文字由编译器连接的事实。通过将字符串分成多行,您可以创建单个多行字符串:const char *text = "...
    编程 发布于2024-12-28
  • 如何准确地透视具有不同记录的数据以避免丢失信息?
    如何准确地透视具有不同记录的数据以避免丢失信息?
    有效地透视不同记录透视查询在将数据转换为表格格式、实现轻松数据分析方面发挥着至关重要的作用。但是,在处理不同记录时,数据透视查询的默认行为可能会出现问题。问题:忽略不同值考虑下表:------------------------------------------------------ | Id ...
    编程 发布于2024-12-27

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3