”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 掌握复合组件:打造灵活可复用的React组件

掌握复合组件:打造灵活可复用的React组件

发布于2025-04-18
浏览:978

介绍

在React世界上最有用,最广泛使用的概念之一是设计模式,因为它们有助于保持代码可扩展并为我们创建的组件提供添加的含义。

有多种模式,在本文中,我们将讨论

,这是一种高级模式,对于创建灵活且可合并的接口特别有用。 什么是复合组件?

复合组件是React中的高级模式。它的目标是通过在一组组件之间启用状态和逻辑的共享来创建更灵活的设计。这样,可以灵活地实现父组件和子组件之间的通信。

组件共同起作用,以实现某些行为,而无需创建复杂的道具树或过于复杂的逻辑,这将来很难重构或理解。

这种模式有助于消除道具钻探,在那里我们通过几个组件层传递了大量道具。道具钻探可能是有问题的,因为每次更新状态时可能会导致不必要的重新订阅者,因为每个状态更改都会更新所有儿童组件。

可以在选择和选项标签的HTML结构中看到化合物组件的示例:

[2

选择元素作为接口的状态管理器工作,而“选项元素”配置了选择组件应如何运行。

使用化合物组件的示例

在此示例中,我们将创建一个模态,该模态分为两个复合组件:切换和内容。他们将共享模式的开放/关闭状态。

让我们遍历如何逐步创建此组件:

Mastering Compound Components: Building Flexible and Reusable React Components我们可以从创建将管理模态的开放/关闭状态的上下文开始:

创建模态组件的基础:

[2

注意,我们正在使用孩子抓住将放置在模态内的组件。我们想这样使用它:

[2

现在我们需要创建切换组件,该切换组件将负责打开模式:

[2

我们还需要一个内容组件,该内容将负责显示模式的内容:

[2 最后,我们可以将两个组件添加到我们的模态组件中,并且可以使用! ?

[2

用法:

[2

结果:Mastering Compound Components: Building Flexible and Reusable React Components [2

以这种方式,我们制作和使用模式非常灵活和重复使用。 modal.toggle负责触发模态显示,而模态应显示模态内容。

此结构允许开发人员根据其应用程序的特定需求轻松自定义模式的行为和内容,从而使代码清洁器和更有条理。

其他例子 Mastering Compound Components: Building Flexible and Reusable React Components

我们还可以在其他上下文中使用复合组件,例如:

[2

菜单组件:Mastering Compound Components: Building Flexible and Reusable React Components [2

所有这些示例都是灵活和适应性的,使开发,可扩展性和组件用法更加容易。

锻炼

我们注意到关闭按钮放置在内容组件内,但是要有一个专门用于管理模态关闭的组件会很有趣。您可以创建 close 之类的东西。尝试尝试并添加此组件! Mastering Compound Components: Building Flexible and Reusable React Components 结论

我们已经看到使用复合组件模式的编写组件如何在我们的应用程序中有用。我们还探索了如何实施它并审查了这种模式可以合适的示例。

随意探索和实验使用复合组件创建组件。明智地使用它并评估在您的上下文中应用是否有意义,就好像不是很好地实施,它最终可能更像是一种障碍,而不是帮助。

注意:我在react4noobs上发布了相同的内容,这是一个BR存储库,将React Universe中的开发人员创建的文章汇总在一起。值得检查!Mastering Compound Components: Building Flexible and Reusable React Components

版本声明 本文转载于:https://dev.to/gabrielduete/mastering-compound-components-building-flexible-and-reusable-react-components-3bnj?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • Java字符串非空且非null的有效检查方法
    Java字符串非空且非null的有效检查方法
    检查字符串是否不是null而不是空的if (str != null && !str.isEmpty())Option 2: str.length() == 0For Java versions prior to 1.6, str.length() == 0 can be二手: if(str!= n...
    编程 发布于2025-05-03
  • Python高效去除文本中HTML标签方法
    Python高效去除文本中HTML标签方法
    在Python中剥离HTML标签,以获取原始的文本表示 仅通过Python的MlStripper 来简化剥离过程,Python Standard库提供了一个专门的功能,MLSTREPERE,MLSTREPERIPLE,MLSTREPERE,MLSTREPERIPE,MLSTREPERCE,MLST...
    编程 发布于2025-05-03
  • 如何将来自三个MySQL表的数据组合到新表中?
    如何将来自三个MySQL表的数据组合到新表中?
    mysql:从三个表和列的新表创建新表 答案:为了实现这一目标,您可以利用一个3-way Join。 选择p。*,d.content作为年龄 来自人为p的人 加入d.person_id = p.id上的d的详细信息 加入T.Id = d.detail_id的分类法 其中t.taxonomy =...
    编程 发布于2025-05-03
  • 可以在纯CS中将多个粘性元素彼此堆叠在一起吗?
    可以在纯CS中将多个粘性元素彼此堆叠在一起吗?
    [2这里: https://webthemez.com/demo/sticky-multi-header-scroll/index.html </main> <section> { display:grid; grid-template-...
    编程 发布于2025-05-03
  • 同实例无需转储复制MySQL数据库方法
    同实例无需转储复制MySQL数据库方法
    在同一实例上复制一个MySQL数据库而无需转储在同一mySQL实例上复制数据库,而无需创建InterMediate sqql script。以下方法为传统的转储和IMPORT过程提供了更简单的替代方法。 直接管道数据 MySQL手动概述了一种允许将mysqldump直接输出到MySQL clie...
    编程 发布于2025-05-03
  • 在Go语言中如何简洁定义10的幂常量
    在Go语言中如何简洁定义10的幂常量
    在GO 利用浮点线文字一种简洁的方式是使用浮点文字,该方法是使用floingpoint protals。写作1E3比写作1000更有效。这是一个示例(67个没有空间的字符):的文字用于未构图的整数常数,我们可以将1000用于KB,并用KB将随后的常量乘以KB,如下所示(77个没有空格的字符):,作...
    编程 发布于2025-05-03
  • 如何处理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-03
  • Async Void vs. Async Task在ASP.NET中:为什么Async Void方法有时会抛出异常?
    Async Void vs. Async Task在ASP.NET中:为什么Async Void方法有时会抛出异常?
    在ASP.NET async void void async void void void void void void void的设计无需返回asynchroncon而无需返回任务对象。他们在执行过程中增加未偿还操作的计数,并在完成后减少。在某些情况下,这种行为可能是有益的,例如未期望或明确...
    编程 发布于2025-05-03
  • 如何避免Go语言切片时的内存泄漏?
    如何避免Go语言切片时的内存泄漏?
    ,a [j:] ...虽然通常有效,但如果使用指针,可能会导致内存泄漏。这是因为原始的备份阵列保持完整,这意味着新切片外部指针引用的任何对象仍然可能占据内存。 copy(a [i:] 对于k,n:= len(a)-j i,len(a); k
    编程 发布于2025-05-03
  • 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...
    编程 发布于2025-05-03
  • 图片在Chrome中为何仍有边框?`border: none;`无效解决方案
    图片在Chrome中为何仍有边框?`border: none;`无效解决方案
    在chrome 在使用Chrome and IE9中的图像时遇到的一个频繁的问题是围绕图像的持续薄薄边框,尽管指定了图像,尽管指定了;和“边境:无;”在CSS中。要解决此问题,请考虑以下方法: Chrome具有忽略“ border:none; none;”的已知错误,风格。要解决此问题,请使用以下...
    编程 发布于2025-05-03
  • 为什么使用Firefox后退按钮时JavaScript执行停止?
    为什么使用Firefox后退按钮时JavaScript执行停止?
    导航历史记录问题:JavaScript使用Firefox Back Back 此行为是由浏览器缓存JavaScript资源引起的。要解决此问题并确保在后续页面访问中执行脚本,Firefox用户应设置一个空功能。 警报'); }; alert('inline Alert')...
    编程 发布于2025-05-03
  • \“(1)vs.(;;):编译器优化是否消除了性能差异?\”
    \“(1)vs.(;;):编译器优化是否消除了性能差异?\”
    答案: 在大多数现代编译器中,while(1)和(1)和(;;)之间没有性能差异。编译器: perl: 1 输入 - > 2 2 NextState(Main 2 -E:1)V-> 3 9 Leaveloop VK/2-> A 3 toterloop(next-> 8 last-> 9 ...
    编程 发布于2025-05-03
  • 如何将PANDAS DataFrame列转换为DateTime格式并按日期过滤?
    如何将PANDAS DataFrame列转换为DateTime格式并按日期过滤?
    Transform Pandas DataFrame Column to DateTime FormatScenario:Data within a Pandas DataFrame often exists in various formats, including strings.使用时间数据时...
    编程 发布于2025-05-03
  • 大批
    大批
    [2 数组是对象,因此它们在JS中也具有方法。 切片(开始):在新数组中提取部分数组,而无需突变原始数组。 令ARR = ['a','b','c','d','e']; // USECASE:提取直到索引作...
    编程 发布于2025-05-03

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

Copyright© 2022 湘ICP备2022001581号-3