”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > React 中 props.children 的完整指南

React 中 props.children 的完整指南

发布于2024-07-31
浏览:482

A Complete Guide To props.children In React

我使用 React 开发了几个月,但没有完全理解 React 组件模型的真正威力。有一天,我决定深入研究作曲,这就是我学到的。

React 组件和子组件

在 React 中,一个组件可以有一个、多个子组件,也可以没有子组件。很好,但是等等 —— 什么是“孩子”?我们用一个例子来解释一下:


  
  

配置文件组件有两个子组件:ProfileImage 和 ProfileDetails,而这两个没有子组件

“在同时包含开始标签和结束标签的 JSX 表达式中,这些标签之间的内容作为特殊 props 传递:props.children” — React 文档

本质上,props.children是一个特殊的prop,自动传递给每个组件,可用于在调用组件时渲染开始和结束标记之间包含的内容。这些类型的组件被官方文档标识为“boxes”。

通过 JSX 语法识别组件

在 React 的 JSX 中,具有子组件的组件始终由开始标签和结束标签来标识。每个子项都必须放置在这两个标签之间,就像我们在上面看到的那样。当组件没有子组件时,您可以使用 调用它,但通常首选后一种语法。自闭合标签的目的是使代码更短且更易于阅读。

操作中的 props.children

假设我们要创建一个 ImageSlider 组件。我们的目标是像这样调用组件:


  React 中 props.children 的完整指南
  React 中 props.children 的完整指南
  React 中 props.children 的完整指南

可以看到,ImageSlider是由多个React 中 props.children 的完整指南组成,可以通过props.children来访问和渲染。

export default function ImageSlider(props) { 
    return (
      
{props.children}
); }

感谢 props.children 我们可以将内容嵌套在组件中,就像嵌套常见的 HTML 元素一样.

props.children 允许使用哪些类型的内容?

通过 props.children 传递给组件的内容可以包括

undefined、null、布尔值、数字、字符串、React 元素或任何这些类型的递归数组。它也可以是返回这些类型之一的函数。

请注意,正如 React 文档中提到的, false、null、undefined 和 true 是有效的子项,但它们将被忽略并且不会渲染。如果想要渲染 false、true、null 或 undefined,必须先将其转换为字符串:


  { String(undefined) }

为什么 props.children 如此重要?

props.children 允许我们组合组件,从而组合我们的前端界面;利用 React 组件模型的真正力量。

“React 拥有强大的组合模型,我们建议使用组合而不是继承以在组件之间重用代码。” — React 文档

正如官方文档中所述,有时您可能需要填充组件中的多个“漏洞”。在这种情况下,定义多个自定义 props 可能是更好的方法,而不是使用 props.children;如下例所示:

function SplitPane(props) {
  const { left, right } = props

  return (
    
{ left }
{ right }
); }

React.Children

“React.Children 提供了处理 props.children 不透明数据结构的实用程序” — React 文档

为什么 props.children 是一个“不透明的数据结构”?

因为 props.children 可以由一个、多个或没有子元素组成,这意味着它的值可以是单个子节点,子节点数组,或者 未定义分别。感谢 React.Children API,我们可以轻松处理 props.children,而无需考虑其每种可能的类型。值得庆幸的是,一切都会在后台为我们处理。

在撰写本文时,React.Children 提供了五种不同的实用程序

  • 地图

  • forEach

  • 数数

  • 仅有的

  • toArray

让我们通过一个例子来看看如何使用 React.Children。假设我们想要将特殊的 CSS 类 img-special-class 添加到 ImageSlider 组件的每个子组件中。这可以按如下方式完成:

export default function ImageSlider(props) {
  const { children } = props

  return (
    
{ React.Children.map(children, (child) => React.cloneElement(child, { className: `${child.props.className} img-special-class` }) ) }
); }

React.Children.map 允许我们迭代 props.children 并根据作为第二个参数传递的函数转换每个元素。为了实现我们的目标,我们使用了 React.cloneElement。这是因为我们需要更改 className prop 的值,但是 props 在 React 中是不可变的,因此我们必须克隆每个子级。

结论

掌握 props.children 对于成为一名优秀的 React 开发人员并开始充分利用 React 组件模型的潜力至关重要。 props.children 是 React 最有用的功能之一,因为它使我们能够渲染子组件。正因为如此,每个开发者都应该知道如何正确使用它。

我希望这篇文章能帮助你掌握 React 中的组合。


帖子“A Complete Guide To props.children In React”首先出现在 Writech 上。

版本声明 本文转载于:https://dev.to/writech/a-complete-guide-to-propschildren-in-react-196k?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • Python高效去除文本中HTML标签方法
    Python高效去除文本中HTML标签方法
    在Python中剥离HTML标签,以获取原始的文本表示Achieving Text-Only Extraction with Python's MLStripperTo streamline the stripping process, the Python standard librar...
    编程 发布于2025-05-17
  • 您可以使用CSS在Chrome和Firefox中染色控制台输出吗?
    您可以使用CSS在Chrome和Firefox中染色控制台输出吗?
    在javascript console 中显示颜色是可以使用chrome的控制台显示彩色文本,例如红色的redors,for for for for错误消息?回答是的,可以使用CSS将颜色添加到Chrome和Firefox中的控制台显示的消息(版本31或更高版本)中。要实现这一目标,请使用以下模...
    编程 发布于2025-05-17
  • 如何从Python中的字符串中删除表情符号:固定常见错误的初学者指南?
    如何从Python中的字符串中删除表情符号:固定常见错误的初学者指南?
    从python import codecs import codecs import codecs 导入 text = codecs.decode('这狗\ u0001f602'.encode('utf-8'),'utf-8') 印刷(文字)#带有...
    编程 发布于2025-05-17
  • Python不会对超范围子串切片报错的原因
    Python不会对超范围子串切片报错的原因
    在python中用索引切片范围:二重性和空序列索引单个元素不同,该元素会引起错误,切片在序列的边界之外没有。这种行为源于索引和切片之间的基本差异。索引一个序列,例如“示例” [3],返回一个项目。但是,切片序列(例如“示例” [3:4])返回项目的子序列。索引不存在的元素时,例如“示例” [9] ...
    编程 发布于2025-05-17
  • Python中嵌套函数与闭包的区别是什么
    Python中嵌套函数与闭包的区别是什么
    嵌套函数与python 在python中的嵌套函数不被考虑闭合,因为它们不符合以下要求:不访问局部范围scliables to incling scliables在封装范围外执行范围的局部范围。 make_printer(msg): DEF打印机(): 打印(味精) ...
    编程 发布于2025-05-17
  • 如何限制动态大小的父元素中元素的滚动范围?
    如何限制动态大小的父元素中元素的滚动范围?
    在交互式接口中实现垂直滚动元素的CSS高度限制,控制元素的滚动行为对于确保用户体验和可访问性是必不可少的。一种这样的方案涉及限制动态大小的父元素中元素的滚动范围。问题:考虑一个布局,其中我们具有与用户垂直滚动一起移动的可滚动地图div,同时与固定的固定sidebar保持一致。但是,地图的滚动无限期...
    编程 发布于2025-05-17
  • 如何处理PHP文件系统功能中的UTF-8文件名?
    如何处理PHP文件系统功能中的UTF-8文件名?
    在PHP的Filesystem functions中处理UTF-8 FileNames 在使用PHP的MKDIR函数中含有UTF-8字符的文件很多flusf-8字符时,您可能会在Windows Explorer中遇到comploreer grounder grounder grounder gro...
    编程 发布于2025-05-17
  • Go web应用何时关闭数据库连接?
    Go web应用何时关闭数据库连接?
    在GO Web Applications中管理数据库连接很少,考虑以下简化的web应用程序代码:出现的问题:何时应在DB连接上调用Close()方法?,该特定方案将自动关闭程序时,该程序将在EXITS EXITS EXITS出现时自动关闭。但是,其他考虑因素可能保证手动处理。选项1:隐式关闭终止数...
    编程 发布于2025-05-17
  • 如何在Chrome中居中选择框文本?
    如何在Chrome中居中选择框文本?
    选择框的文本对齐:局部chrome-inly-ly-ly-lyly solument 您可能希望将文本中心集中在选择框中,以获取优化的原因或提高可访问性。但是,在CSS中的选择元素中手动添加一个文本 - 对属性可能无法正常工作。初始尝试 state)</option> < op...
    编程 发布于2025-05-17
  • 如何将多种用户类型(学生,老师和管理员)重定向到Firebase应用中的各自活动?
    如何将多种用户类型(学生,老师和管理员)重定向到Firebase应用中的各自活动?
    Red: How to Redirect Multiple User Types to Respective ActivitiesUnderstanding the ProblemIn a Firebase-based voting app with three distinct user type...
    编程 发布于2025-05-17
  • 如何在无序集合中为元组实现通用哈希功能?
    如何在无序集合中为元组实现通用哈希功能?
    在未订购的集合中的元素要纠正此问题,一种方法是手动为特定元组类型定义哈希函数,例如: template template template 。 struct std :: hash { size_t operator()(std :: tuple const&tuple)const {...
    编程 发布于2025-05-17
  • Java中假唤醒真的会发生吗?
    Java中假唤醒真的会发生吗?
    在Java中的浪费唤醒:真实性或神话?在Java同步中伪装唤醒的概念已经是讨论的主题。尽管存在这种行为的潜力,但问题仍然存在:它们实际上是在实践中发生的吗? Linux的唤醒机制根据Wikipedia关于伪造唤醒的文章,linux实现了pthread_cond_wait()功能的Linux实现,利用...
    编程 发布于2025-05-17
  • 如何使用Regex在PHP中有效地提取括号内的文本
    如何使用Regex在PHP中有效地提取括号内的文本
    php:在括号内提取文本在处理括号内的文本时,找到最有效的解决方案是必不可少的。一种方法是利用PHP的字符串操作函数,如下所示: 作为替代 $ text ='忽略除此之外的一切(text)'; preg_match('#((。 &&& [Regex使用模式来搜索特...
    编程 发布于2025-05-17
  • 如何正确使用与PDO参数的查询一样?
    如何正确使用与PDO参数的查询一样?
    在pdo 中使用类似QUERIES在PDO中的Queries时,您可能会遇到类似疑问中描述的问题:此查询也可能不会返回结果,即使$ var1和$ var2包含有效的搜索词。错误在于不正确包含%符号。通过将变量包含在$ params数组中的%符号中,您确保将%字符正确替换到查询中。没有此修改,PDO...
    编程 发布于2025-05-17
  • 如何使用Python的请求和假用户代理绕过网站块?
    如何使用Python的请求和假用户代理绕过网站块?
    如何使用Python的请求模拟浏览器行为,以及伪造的用户代理提供了一个用户 - 代理标头一个有效方法是提供有效的用户式header,以提供有效的用户 - 设置,该标题可以通过browser和Acterner Systems the equestersystermery和操作系统。通过模仿像Chro...
    编程 发布于2025-05-17

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

Copyright© 2022 湘ICP备2022001581号-3