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

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

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

您可能一直在将 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]删除
最新教程 更多>
  • 如何将MySQL数据库添加到Visual Studio 2012中的数据源对话框中?
    如何将MySQL数据库添加到Visual Studio 2012中的数据源对话框中?
    在Visual Studio 2012 尽管已安装了MySQL Connector v.6.5.4,但无法将MySQL数据库添加到实体框架的“ DataSource对话框”中。为了解决这一问题,至关重要的是要了解MySQL连接器v.6.5.5及以后的6.6.x版本将提供MySQL的官方Visual...
    编程 发布于2025-04-21
  • Java中如何使用观察者模式实现自定义事件?
    Java中如何使用观察者模式实现自定义事件?
    在Java 中创建自定义事件的自定义事件在许多编程场景中都是无关紧要的,使组件能够基于特定的触发器相互通信。本文旨在解决以下内容:问题语句我们如何在Java中实现自定义事件以促进基于特定事件的对象之间的交互,定义了管理订阅者的类界面。以下代码片段演示了如何使用观察者模式创建自定义事件: args)...
    编程 发布于2025-04-21
  • 为什么不````''{margin:0; }`始终删除CSS中的最高边距?
    为什么不````''{margin:0; }`始终删除CSS中的最高边距?
    在CSS 问题:不正确的代码: 全球范围将所有余量重置为零,如提供的代码所建议的,可能会导致意外的副作用。解决特定的保证金问题是更建议的。 例如,在提供的示例中,将以下代码添加到CSS中,将解决余量问题: body H1 { 保证金顶:-40px; } 此方法更精确,避免了由全局保证金重置引...
    编程 发布于2025-04-21
  • PHP短标签使用指南:该用吗?
    PHP短标签使用指南:该用吗?
    使用可以使用的php短标签? ruficated:答案:官方的PHP文档建议不要使用短标签,因为它们可能会导致便携性问题。短标签(例如
    编程 发布于2025-04-21
  • JavaScript中原始值与引用值的区别是什么
    JavaScript中原始值与引用值的区别是什么
    Primitive vs Reference Values in JavaScriptIn programming, variables can store two types of values: primitive values and reference values.Primitive Va...
    编程 发布于2025-04-21
  • Java是否允许多种返回类型:仔细研究通用方法?
    Java是否允许多种返回类型:仔细研究通用方法?
    在Java中的多个返回类型:一种误解类型:在Java编程中揭示,在Java编程中,Peculiar方法签名可能会出现,可能会出现,使开发人员陷入困境,使开发人员陷入困境。 getResult(string s); ,其中foo是自定义类。该方法声明似乎拥有两种返回类型:列表和E。但这确实是如此吗...
    编程 发布于2025-04-21
  • Flatten与Ravel:NumPy函数选择指南
    Flatten与Ravel:NumPy函数选择指南
    了解Numpy的Flatten和Ravel functions Numpy库提供两种方法,Flatten and ravel,以将多维数组转换为一维数组。但是,出现了一个问题:为什么要执行相同任务的两个不同的函数?相同的输出,不同的行为 打印(y.ravel()) [1 2 3 4 5 6 7 ...
    编程 发布于2025-04-21
  • 如何从2D数组中提取元素?使用另一数组的索引
    如何从2D数组中提取元素?使用另一数组的索引
    Using NumPy Array as Indices for the 2nd Dimension of Another ArrayTo extract specific elements from a 2D array based on indices provided by a second ...
    编程 发布于2025-04-21
  • Python中嵌套函数与闭包的区别是什么
    Python中嵌套函数与闭包的区别是什么
    嵌套函数与python 在python中的嵌套函数不被考虑闭合,因为它们不符合以下要求:不访问局部范围scliables to incling scliables在封装范围外执行范围的局部范围。 make_printer(msg): DEF打印机(): 打印(味精) ...
    编程 发布于2025-04-21
  • PHP阵列键值异常:了解07和08的好奇情况
    PHP阵列键值异常:了解07和08的好奇情况
    PHP数组键值问题,使用07&08 在给定数月的数组中,键值07和08呈现令人困惑的行为时,就会出现一个不寻常的问题。运行print_r($月份)返回意外结果:键“ 07”丢失,而键“ 08”分配给了9月的值。此问题源于PHP对领先零的解释。当一个数字带有0(例如07或08)的前缀时,PHP将...
    编程 发布于2025-04-21
  • CSS尺寸单位使用技巧提升网页设计
    CSS尺寸单位使用技巧提升网页设计
    为什么CSS尺寸单元很重要 CSS尺寸单元是设计响应能力的骨干。这些单元定义了与他人或视口本身有关的元素应出现的大小或小。就像魔术公式告诉您的网站如何在不同的屏幕尺寸上行事。没有这些单元,您的设计最终可能会看起来尴尬,伸展或在某些设备上狭窄。 ,但这是事实:大小单元的类型不同,...
    编程 发布于2025-04-21
  • 如何高效地在一个事务中插入数据到多个MySQL表?
    如何高效地在一个事务中插入数据到多个MySQL表?
    mySQL插入到多个表中,该数据可能会产生意外的结果。虽然似乎有多个查询可以解决问题,但将从用户表的自动信息ID与配置文件表的手动用户ID相关联提出了挑战。使用Transactions和last_insert_id() 插入用户(用户名,密码)值('test','test...
    编程 发布于2025-04-21
  • `_tmain()与main()在C++中何时使用?`
    `_tmain()与main()在C++中何时使用?`
    Difference Between _tmain() and main() in C In C , the primary method for defining the program's entry point is main(), which typically appears ...
    编程 发布于2025-04-21
  • 为什么PHP的DateTime :: Modify('+1个月')会产生意外的结果?
    为什么PHP的DateTime :: Modify('+1个月')会产生意外的结果?
    使用php dateTime修改月份:发现预期的行为在使用PHP的DateTime类时,添加或减去几个月可能并不总是会产生预期的结果。正如文档所警告的那样,“当心”这些操作的“不像看起来那样直观。 考虑文档中给出的示例:这是内部发生的事情: 现在在3月3日添加另一个月,因为2月在2001年只有2...
    编程 发布于2025-04-21
  • 在JavaScript中如何获取实际渲染的字体,当CSS字体属性未定义时?
    在JavaScript中如何获取实际渲染的字体,当CSS字体属性未定义时?
    Accessing Actual Rendered Font when Undefined in CSSWhen accessing the font properties of an element, the JavaScript object.style.fontFamily and objec...
    编程 发布于2025-04-21

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

Copyright© 2022 湘ICP备2022001581号-3