搜索
首页web前端css教程防弹 Web 组件 API

防弹 Web 组件 API

Nov 13, 2024 pm 01:52 PM

Web 组件/自定义元素提供了一些出色的功能,可以使您的用户体验更加高效和可扩展,但也有一些“陷阱”可能会阻止团队获得良好的组件体验。

问题

自定义元素/Web 组件的一大优点有时对他们来说是一个挑战 - 它们可以在任何地方使用。您永远不知道它们是否在框架中、在类型安全的环境中使用、在服务器上使用 PHP 等语言呈现、使用 JavaScript 的 creatElement 函数以编程方式创建,甚至在普通的 HTML 中。

挑战在于没有一致的方法来确保正确实现您的 Web 组件 API。因此,我们组件库的 PR 清单中的一项是:

✅ 属性和属性在设置、取消设置和设置不当时都有效。

例如,在我们的库中,我们有一个“输入”组件,就像原生的 一样。元素,具有带有一些指定值的 type 属性。它不具有所有相同的选项,因为我们为其他一些控件(如单选按钮和复选框)提供了特定的组件。

/** A string specifying the type of control to render. */
@property()
type:
  | 'color'
  | 'date'
  | 'email'
  | 'number'
  | 'password'
  | 'search'
  | 'tel'
  | 'text' = 'text';

注意:代码示例使用 Lit,但这里讨论的原理可以应用于其他库和框架。

当我们测试此属性时,我们得到不一致的结果。

  • 设置
    • 一切都按预期进行。
<my-input type="color"></my-input>
<my-input type="date"></my-input>
<my-input type="email"></my-input>
<my-input type="number"></my-input>
<my-input type="password"></my-input>
<my-input type="search"></my-input>
<my-input type="tel"></my-input>
<my-input type="text"></my-input>
  • 未设置
    • 由于默认值而未设置属性时,组件可以正常工作
    • 当属性未定义时,组件会正确呈现,因为内部 HTML 元素是有弹性的,但组件中的自定义逻辑和验证会中断
// When the attribute is not set
<my-input></my-input>

// When the property is `undefined` (example using JSX)
<my-input type="{undefined}"></my-input>
  • 设置不当
    • 将 type 属性值设置为“垃圾”会呈现文本输入,但也会破坏我们的自定义逻辑和验证。
    • 将其设置为有效 HTML 输入类型的值,但不是我们为组件指定的值,会呈现不适合我们组件的控件,这不仅会破坏我们的自定义逻辑和验证,还会破坏我们的样式/设计。
<!-- not a real type -->
<my-input type="rubbish"></my-input>

<!-- we don't want users using this type -->
<my-input type="range"></my-input>

您可以在这里测试这个示例:

Bullet-Proof Web Component APIs

我们该如何解决它?

我注意到原生 HTML 元素似乎通过了“设置、未设置和设置不当”测试,所以让我们看看是否可以从中学习。

当我错误地设置本机输入的属性并记录属性值时,我可以明白为什么它会起作用。

<!-- set the value to a non-standard type -->
<input type="rubbish">
<input>



<p>If an invalid value is assigned to the attribute or property, it falls back to a default value. We should be able to do the same and still maintain strong typing.</p>

<p>Let's start by creating a list of valid values and a type for our property.<br>
</p>

<pre class="brush:php;toolbar:false">const inputTypes = [
  'color',
  'date',
  'email',
  'number',
  'password',
  'search',
  'tel',
  'text',
] as const;

我们可以使用数组创建联合类型以进行 TypeScript 验证。

/** A string specifying the type of control to render. */
@property()
type:
  | 'color'
  | 'date'
  | 'email'
  | 'number'
  | 'password'
  | 'search'
  | 'tel'
  | 'text' = 'text';

现在我们可以使用一些验证逻辑来​​更新我们的自定义元素属性。我们可以通过将现有属性转换为标准 JavaScript 类 getter 和 setter 来实现此目的。

<my-input type="color"></my-input>
<my-input type="date"></my-input>
<my-input type="email"></my-input>
<my-input type="number"></my-input>
<my-input type="password"></my-input>
<my-input type="search"></my-input>
<my-input type="tel"></my-input>
<my-input type="text"></my-input>

这是我们的最终输出:

Bullet-Proof Web Component APIs

结论

有了这个新的验证,我们的输入组件比以前更具弹性,并且在必要时还允许进行更复杂的验证。对于某些属性,尤其是用于样式的属性,此方法也可能太过分了。对于这些场景,请务必查看这篇文章。

以上是防弹 Web 组件 API的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
' CSS4”更新' CSS4”更新Apr 11, 2025 pm 12:05 PM

自从我第一次介绍了CSS4面中的事情以来,就已经进行了更多的讨论。我将在这里从其他人那里汇集我最喜欢的想法。有

三种代码三种代码Apr 11, 2025 pm 12:02 PM

每次启动一个新项目时,我都会将我正在查看的代码分为三种类型,或者如果您愿意的话。我认为这些类型可以应用于

https很容易!https很容易!Apr 11, 2025 am 11:51 AM

我对公开哀悼HTTPS的复杂性感到内gui。过去,我从第三方供应商那里购买了SSL证书,并且遇到了麻烦

HTML数据属性指南HTML数据属性指南Apr 11, 2025 am 11:50 AM

您想了解的有关HTML,CSS和JavaScript中数据属性的所有信息。

了解JavaScript中的不变性了解JavaScript中的不变性Apr 11, 2025 am 11:47 AM

如果您以前从未在JavaScript中使用不变性,则可能会发现很容易将其与为新值或重新分配分配变量的混淆。

具有现代CSS功能的定制样式表单输入具有现代CSS功能的定制样式表单输入Apr 11, 2025 am 11:45 AM

如今,可以在语义上且易于访问的同时构建自定义的复选框,无线电按钮和切换开关。我们甚至不需要

脚注字符脚注字符Apr 11, 2025 am 11:34 AM

有特殊的超级数字字符有时非常适合脚注。他们在这里:

如何使用HTML,CSS和JavaScript创建动画倒计时计时器如何使用HTML,CSS和JavaScript创建动画倒计时计时器Apr 11, 2025 am 11:29 AM

您是否曾经在项目上需要一个倒计时计时器?对于这样的东西,可以自然访问插件,但实际上更多

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

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