我非常喜欢 Web 的组件化。 我认为这是在几乎任何规模(除了可能最基本的情况)构建网站的一种非常好的方式。 关于什么构成了一个好组件,人们有很多不同的意见,但让我们暂时将范围缩小到第三方。 也就是说,您只需使用而不是作为网站独特设置的一部分而自己构建的组件。
什么让第三方组件变得出色? 我最喜欢的第三方组件属性是它将困难的事情变得容易。 尤其是识别并正确处理细微差别的事情,或者您甚至可能不了解如何正确处理的事情。
也许您使用了一些组件来为您提供弹出式上下文菜单。 它可能会执行浏览器边缘检测,例如确保菜单永远不会出现裁剪或超出屏幕。 这是一个棘手的编程小细节,如果您自己做的话可能无法做到,或者甚至忘记做。
我想到 React Router 的 <Link />
组件,或者在 Gatsby 网站上使用的东西。 它会自动为您在链接中注入 aria-current="page"
,当您在该页面上时。 您现在就可以(并且可能应该)使用它作为样式挂钩! 而且如果您正在处理自己的链接,您可能会忘记编写它。
同样的道理,Reach UI 选项卡 具有严格的辅助功能,如果您手动编写它们,您可能无法做到。 这个 React 图片组件 完成了各种各样与图片相关的相对难以实现的事情,例如复杂的响应式图片语法、延迟加载、占位符等等。 从某种意义上说,这相当于为您提供“免费的”最佳实践。
这里有一个 表格库,它甚至不接触您的 UI,而是专注于您在表格中可能需要的其他需求,这是一种非常有趣的方法。
无论如何! 当我询问这个问题时,大家怎么说。 是什么让第三方组件变得很棒? 它们最棒的功能是什么?(除了显而易见的事情,比如好的文档和好的辅助功能)? 其中一些可能相互矛盾。 我只是列出人们说他们喜欢什么。
- 即插即用。 它应该“正常工作”,配置最少。
- 大量可编辑的演示
- 高度可配置
- “白标”样式。 不要带来太强烈的设计选择。
- 通过普通 CSS 设置样式,以便您可以 BYO 自己的样式工具
- 快速
- 体积小
- 可以通过包管理器安装
- 可以手动实例化
- 可以指定一个 DOM 节点,组件可以在其中运行
- 遵循有用的版本控制方案
- 得到维护,特别是安全维护
- 有公开路线图
- 与框架无关
- 没有其他依赖关系
- 使用直观的命名约定
- 支持国际化
- 有大量测试
您还会在列表中添加什么内容?
我构建的第一个大型网站完全是用 ASP Perl 完成的,使用手动编码的模块和函数来连接 SQL Server、生成表单和表格、执行查询、验证和清理、登录等等! 我当时拥有的唯一能够执行远程代码签出的编辑器是 Microsoft FrontPage! 它有数百个页面和数十个表单。 以及来自夏威夷到波兰的约 40 位内部作者。 以及大约 300 个用户帐户。
它全部运行在 Microsoft Developer Network Beta 上。
它可能是唯一一个用 ASP Perl 编写的网站。 几乎可以肯定它是最大的网站。
如果出现任何问题,地球上只有一个能解决问题的人。 每个用户都有我的电话号码。 因此,两年多来,我基本上没有睡过一个安稳觉。
所以我非常高兴地发现了 Drupal,然后是 WordPress。 因为有人维护核心和组件。
所以,这长篇大论是要说明,直到今天,对我来说,组件的第一个重要标准是它的安装基础有多大? 第二个是它的开发有多活跃? 第三个是有替代品吗? 第四个我可以同步小更新或分发错误修复更新而不重新安装或重新配置吗?
在过去 10-15 年里,自从我开始使用这些问题以来,我被叫醒过夜的次数可能只有三次。 如果某个组件在我或我维护的 100 多个客户网站的某个网站醒来之前崩溃,那么很有可能它已经被报告并修复了。 我所要做的就是检查我的隔夜备份并运行更新。
所以底线是,如果有 1000 个,最好是 10000 个以上的安装实例,并且有活跃的开发人员,我会使用该组件。 否则我会收取额外费用。
很多人喜欢走在技术的前沿。 我曾经也是他们中的一员,我敬佩、尊重和感谢他们。 并且不断感谢他们为审核过程进行众包。 但是我不希望再做一次。
我一直很欣赏第三方组件样式包含一个 Sass 文件,其中包含一些变量,我可以覆盖它们以更好地适应设计。
如果您谈论的是 React 生态系统,那么这种情况越来越少。 React 鼓励使用 CSS-in-JS,现在我们使用的绝大多数 React 第三方包都默认使用它,并且对基于类的普通 CSS 样式的支持有限或有故障。
我知道当您将某种问题归咎于框架时,每个人都会感到不舒服,但在这种情况下,我认为很明显,这个问题在 Vue 包中并不那么普遍,因为 Vue 鼓励并为您提供工具来更轻松地编写普通 CSS。
我使用第三方包越多,就越倾向于自己编写它们,并花时间把它们做好。 可访问性是可以学习和自己实现的,而且您不必处理使用第三方包时遇到的所有 UX 笨拙和始终无法修复的错误。 很少有包实际上满足此处列出的所有标准。