目录
第1课:尽可能多地避免儿童组件
第2课:确保您的道具不会相互冲突
首页 web前端 css教程 我从制作React组件中学到的两个课程

我从制作React组件中学到的两个课程

Apr 13, 2025 am 09:51 AM

我从制作React组件中学到的两个课程

这是我学到的几个课程,了解如何构建反应组件。这些是我过去几个月来遇到的事情,如果您正在使用设计系统,尤其是一个拥有大量旧技术决策和大量技术债务的设计系统,他们可能会感兴趣。

第1课:尽可能多地避免儿童组件

在具有许多组件的大型设计系统上工作的一件事是,以下模式最终开始变得有问题真正的实际问题:

 <card>
  <card.header>标题</card.header>
  <card.body> <p>这是一些内容</p> </card.body>
</card>
登录后复制

有问题的零件是那些儿童组件,card.body和card.header。这个示例并不糟糕,因为事情相对简单 - 当组件变得越来越复杂时,事情就会变得笨拙。例如,每个儿童组件都可以具有一系列干扰其他的复杂道具。

我最大的痛点之一是我们的形式组件。以此:

 
  
  
登录后复制
提交

当然,我正在大量简化事情,但是每当工程师想要将两个按钮彼此放置时,即使页面上没有表格,它们也会导入表单。这意味着表单组件中的所有内容都会导入,最终对性能不利。恰好是不良系统设计实施。

在记录组件时,这也使事情变得更加困难,因为现在您必须确保这些孩子的组件中的每个组件都会记录下来。

因此,我们应该简单地将其制成一个全新的组件,而不是使其成为儿童组成部分,而是将其制成:formactions(或者可能具有更好的名称,例如ButtOngongroup)。这样,我们不必一直导入形式,我们可以将基于布局的组件与其他组件分开。

我学到了我的教训。从这里开始,我将完全避免使用儿童组件。

第2课:确保您的道具不会相互冲突

曼迪·迈克尔(Mandy Michael)写了一篇很棒的文章,讲述了道具如何互相撞击并引起各种令人困惑的冲突,例如这个打字稿示例:

接口props {
  Hidemedia?:布尔
  Mediaisedgetoedge?:布尔值
  Mediafullheight?:布尔值
  videoinline?:布尔
}
登录后复制

曼迪写道:

这些道具的目的是改变卡片中图像或视频的方式,或者根本呈现媒体。单独定义它们的问题是,您最终会获得许多切换组件特征的标志,其中许多是相互排斥的。例如,如果也隐藏了保证金,则无法填补它的图像。

对于我们团队设计系统中的许多组件来说,这绝对是一个问题。有很多组件,布尔道具会使组件以各种奇怪而出乎意料的方式行事。在开发过程中,我们甚至在卡组件中弹出了各种错误,因为工程师不知道要打开哪些道具并以任何给定的效果关闭!

曼迪提供以下解决方案:

类型MediaMode ='hidend'| 'EdgetoEdge'| “全力”

接口props {
  MediaMode:“隐藏” | 'EdgetoEdge'| “全力”
}
登录后复制

简而言之:如果我们将所有这些新生的选项结合在一起,那么我们的API易于扩展,并且在将来引起混乱的可能性较小。

就是这样!我只是想快速记下这两个课程。这是我的问题:制作组件或在设计系统上工作时学到了什么?

以上是我从制作React组件中学到的两个课程的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

VUE 3 VUE 3 Apr 02, 2025 pm 06:32 PM

它的出局!恭喜Vue团队完成了完成,我知道这是一项巨大的努力,而且很长时间。所有新文档也是如此。

使用Redwood.js和Fauna构建以太坊应用 使用Redwood.js和Fauna构建以太坊应用 Mar 28, 2025 am 09:18 AM

随着最近比特币价格超过20k美元的攀升,最近打破了3万美元,我认为值得深入研究创建以太坊

您可以从浏览器获得有效的CSS属性值吗? 您可以从浏览器获得有效的CSS属性值吗? Apr 02, 2025 pm 06:17 PM

我有人写了这个非常合法的问题。 Lea只是在博客上介绍了如何从浏览器中获得有效的CSS属性。那样的是这样。

带有粘性定位的堆叠卡和一点点的杂物 带有粘性定位的堆叠卡和一点点的杂物 Apr 03, 2025 am 10:30 AM

前几天,我发现了科里·金尼文(Corey Ginnivan)网站上的这一点,当您滚动时,彼此之间的卡片堆放集。

在CI/CD上有点 在CI/CD上有点 Apr 02, 2025 pm 06:21 PM

我说的“网站”比“移动应用程序”更合适,但我喜欢Max Lynch的框架:

比较浏览器的响应式设计 比较浏览器的响应式设计 Apr 02, 2025 pm 06:25 PM

这些桌面应用程序中有许多目标是同时在不同的维度上显示您的网站。因此,例如,您可以写作

在WordPress块编辑器中使用Markdown和本地化 在WordPress块编辑器中使用Markdown和本地化 Apr 02, 2025 am 04:27 AM

如果我们需要直接在WordPress编辑器中向用户显示文档,那么最佳方法是什么?

为什么Flex布局中的紫色斜线区域会被误认为是'溢出空间”? 为什么Flex布局中的紫色斜线区域会被误认为是'溢出空间”? Apr 05, 2025 pm 05:51 PM

关于Flex布局中紫色斜线区域的疑问在使用Flex布局时,你可能会遇到一些令人困惑的现象,比如在开发者工具(d...

See all articles