在 2023 年屌爆了一整年的 shadcn/ui 用的 Headless UI 到底是何方神圣?

news/2025/10/13 11:37:35/文章来源:https://www.cnblogs.com/sexintercourse/p/19138081

在 2023 年屌爆了一整年的 shadcn/ui 用的 Headless UI 到底是何方神圣?

 

 
2024-03-1113,974阅读8分钟
 
专栏: 
Headless UI 无头组件的介绍与实现
 

作者:易师傅 、github

声明:本文为稀土掘金技术社区首发签约文章,30天内禁止转载,30天后未获授权禁止转载,侵权必究!

前言

近日,百无聊赖,上网游逛,在《2023 JavaScript Rising Stars》 上看到了一个令人匪夷所思的仓库 shadcn/ui,就一年那个 star 数啊,蹭蹭的上涨了 39500 颗星星,这星星数™甩我的王者不知道多少条街,虽然我是个星耀常驻玩家,但是也受不了这刺激啊。

image.png

说来就干,研究一下什么来头,居然以迅雷不及掩耳之势,偷偷发育成难以仰望之帝~

好家伙,看了源代码,原来是一个基于 Headless UI 组件库 radix-ui 的上层 React UI 组件库,心想 Headless UI 组件不是几年前才火起来的玩意嘛,怎么在前端怎么就有一席之地了呢?

看样子真是一代新人换旧人,一代技术一代新人,技术的日新月异也未免是个坏事 ~

一、Headless 的历史和背景

我相信很多同学对计算机界的 Headless 比较熟悉,因为 Headless 一词最初就是来源于 Headless Computer(无头计算机)也就是 Headless System(无头系统),维基百科的介绍为:

无头系统(Headless System)是指已配置为无须显示器(即“头”)、键盘和鼠标操作的计算机系统或设备。无头系统通常通过网络连接控制,但也有部分无头系统的设备需要通过RS-232串行连接进行设备的管理。服务器通常采用无头模式以降低运作成本。

后来慢慢的就有了 Headless Browser(无头浏览器)、Headless CMSHeadless BI 等等常见的 Headless 系列;

Headless UI

在 2017 年,一个在基于 React 的 高阶函数(HOC) 以及 复合组件(Compound Components) 研发的 downshift 诞生了,它的诞生无疑间接的促使了 Headless UI 的来临;

image.png


在 2018 年 6 月 22 日一篇受到 downshift 启发介绍 Headless User Interface Components 的文章应运而生,只是那时候的评判大多褒贬不一,有赞同博主的,也有质疑博主的;由此 Headless UI 一词正式被大家所认知

image.png


后来在 2018 年 10 月 26 日改变现有 React 和 Vue 格局的 《React Conf 2018》大会引入了现有屌爆了的 React Hooks 概念之后; Headless UI 概念才慢慢的被大家所接受。

image.png


因为在大家后知后觉中,其实发现 Headless UI 概念其实与 React Hooks 概念大同小异,只是差别在了一个更多的实现所有数据或交互的状态逻辑层,一个实现现有常见的 UI 库的数据或状态逻辑层,理解不了没关系,下面再详细介绍下;

但是那时国内其实对 Headless UI 这一概念认知还较少,因为在国内这个内卷的时代,大家更多关心的是 React Hooks


就这样到了2020年,在国内社区有较高知名度和影响的 Tailwind Labs 团队 介绍的 Introducing Headless UI 中慢慢开始在国内社区崭露头角;

image.png

二、什么是 Headless UI

Headless UI 全称是 Headless User Interface (无头用户界面),是一种前端开发的方法论(亦或者是一种设计模式),其核心思想是将 用户界面(UI)的逻辑和交互行为 与 视觉表现(CSS 样式) 分离开来;

换句话说,Headless UI 提供了一种方式来构建只包含逻辑和功能的用户界面组件,而不依赖于特定的 CSS 样式框架或 UI 库。

具体而言,Headless UI 的组件通常是纯粹的 JavaScript(或其他编程语言)组件,它们包含了一些交互逻辑和状态管理,但没有任何与视觉样式相关的代码。

三、为什么需要 Headless UI?

众所周知,在传统的 UI 组件中,通常被拆分为两大部分:

  • 外观样式(传统组件 UI 展示层)
  • 逻辑部分(Headless UI部分)

外观样式负责展示元素标签与样式,而逻辑组件部分则负责处理数据逻辑、状态管理和用户交互等功能。

我们看图说话

传统 UI 组件框架

传统 UI 组件包含部分:

Headless UI-1.png

优势:

我相信在座的各位同学,都有用过现成的一些 UI 组件库,例如:Bootstrap 、Material UIAnt Designelement-ui 等等,在其中,我们能看的出来,传统 UI 组件的优势主要有:

  • 开箱即用: 字面意思,直接 install 就可以用了;
  • 易学易用: 文档嘛,一看就懂,一用就废;
  • 功能性全: 根据这么些年的发展,这些个开源组件库,几乎能遇到的 bug 都给整治了;
  • 部分响应式: 这不 Bootstrap 就是一个很好的例子吗

限制:

那么用过的同学肯定也知道现成 UI 组件库的一些痛点,比如:

  • 样式难以定制: 正所谓一个萝卜一个坑,一个公司一套样式,一个项目一套样式,那么这时候的劣势就无限被放大了;
  • 耦合性高: 传统 UI 组件库通常将界面样式、数据逻辑和用户交互等功能耦合在一起,导致代码难以维护和扩展;
  • 创意受限: 公司设计师根据现有传统 UI 组件库提供的一套固定组件和样式,他们想要拓展创意,都收到了很大的影响;
  • 依赖过多: 一些传统 UI 组件库可能依赖于大量的第三方库和插件,增加了项目的复杂性和维护成本;

研发中实际场景的重现

1、需求第一期:

参与人员:前端 A、后端 A、设计师 A、产品 A

其中有一个功能要实现一个日期选择组件,下图是第一期的实现

image.png

你噼里啪啦一顿操作的实现了

那么现在需求迭代了

2、需求第二期:

参与人员:前端 A、后端 A、设计师 B、产品 B

这时候问题就来了,设计师 B 想把这个日期选择的样式改一下,改成如下:

image.png

那么此时阁下又该如何去面对呢?

  • 魔改 ??
  • :deep 强制改 ??
  • !important ??
  • 重写自定义 ??
  • 和设计师沟通 ??
  • 沟通不过来打一顿 ??
  • 不解气,这破工谁爱打谁打

那么我们此时不妨换一种思路,试试用 Headless UI 解决看看??

Headless UI 的解决方案

根据上述咱们已经知道了,普通的 Headless UI 组件包含:数据逻辑、状态逻辑、用户交互等等

Headless UI_副本1.png

其实 Headless UI 的一些拓展还可以包括 浏览器兼容性 和 无障碍访问等功能

用传统 UI 组件库实现一个 date 组件代码:

 
<template>
     <date> 切换 </date>
     // do something  此处省略 500 行
</template>

<script>
//  do something 此处省略 500 行
</script>

<style>
// do something 此处省略 500 行
</style>

能看到组件的逻辑与标签和样式都是高度耦合在一起的,很不利于拓展

我们看下 Headless UI 实现的组件,截取部分:

image.png

能看到 Headless UI 实现的组件简便了很多,完全没有所谓的样式集成在里面了,你想怎么改就怎么改;

说白了,就是 Headless UI 的出现就是为了解决传统 UI 组件框架的缺点,你不是要定制样式吗,现在我 ™ 连样式都不给你,全部由你自己来实现,爱咋滴咋滴,想怎么折腾就怎么折腾,无论多离谱的定制化都能实现。

四、Headless UI 的优势和特点

Headless UI3-1.png

  • 灵活性高: 因为 Headless UI 将组件的逻辑和样式分离,咱们可以根据项目的需要,想怎么玩就怎么玩,你说呢?
  • 可定制: 样式都没了,我这不是想咋定制就定制了吗,你别说两个设计师,1 V 10 都不成问题,还担心啥呢?
  • 轻量级: 只有逻辑了,那可不少了一大堆代码了;
  • 测试友好: 写过单元测试的同学应该都知道,有样式组件和没样式组件的单元测试那就是一个天一个地;
  • 无需学习新的样式框架: 我只看你的 API 不就行了,那样式有啥好关注的。

五、Headless UI 的应用场景

根据个人实际经验,我总结出来的一些实际应用场景:

  1. 跨平台应用: 如果你司同个项目在多个平台上共存,那么此时的样式肯定都是不大一致的,那么现在 Headless UI 就可以发挥它的作用了;
  2. 定制化界面: 如果你们项目需要高度定制样式和功能,我觉得这是一个很不错的选择;
  3. 公司项目较多: 因为一个项目会存在很多个不同样式同逻辑的组件,所以在一个公司中,业务场景较大,以及项目较多,不失为一个很好的选择;

当然 Headless UI 也有缺点,并不适用于所有的项目,

  • 如果你项目使用简单,对设计没有较大的要求,还是用现成的 UI 库比较合适,毕竟开箱即用;
  • 如果公司大家的技术水平参差不齐,还是别瞎整了,还是用现成得吧;
  • 切莫为了跟风而且瞎折腾技术,从实际出发

总结

上述只是给大家介绍了 Headless UI 理论部分,也就是所谓八股文吧;

但是Headless UI的设计模式还是很值得大家去参考学习的;

下面将会有 Headless UI 实战等其它部分:

Headless UI (1).png

感谢大家的支持,码字实在不易,其中如若有错误,望指出,如果您觉得文章不错,记得 点赞关注加收藏 哦 ~

关注我,带您一起搞前端 ~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/936002.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Hadoop+Spark的商店购物趋势分析与可视化平台科技达成

基于Hadoop+Spark的商店购物趋势分析与可视化平台科技达成pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consola…

2025 年折弯厂家推荐:江阴市富磊钢板加工专业中厚钢板折弯加工与高效行业解决方案提供商

行业背景随着船舶设备、港口重工、换热设备、环保设备等重工行业的快速发展,市场对中厚钢板折弯加工的需求日益提升,尤其是超厚、超长、大吨位的钢板折弯加工需求,对加工企业的技术实力、设备配置和产能规模提出了更…

2025年10月振动电机厂家最新推荐排行榜,三相振动电机,单相振动电机,防爆振动电机公司推荐!

2025年10月振动电机厂家最新推荐排行榜:三相、单相及防爆振动电机公司推荐随着工业自动化和智能化的不断发展,振动电机在各个行业的应用越来越广泛。从矿山、冶金到食品加工、化工等领域,振动电机都发挥着重要作用。…

2025 储能 EMS 厂商排名:五大品牌以全维度优势领跑,技术与规模双驱动企业凸显

在新型电力系统建设加速推进的背景下,储能 EMS 作为储能电站的 “大脑”,其厂商的综合实力直接决定系统运行效率与价值实现。2025 年市场竞争已从场景适配转向全维度实力比拼,资质认证的完备性、核心技术的突破性、…

【IEEE出版、连续6届已EI检索、多校联办】第七届机器人、智能控制与人工智能国际学术会议(RICAI 2025)

第七届机器人、智能控制与人工智能国际学术会议(RICAI 2025) 2025 7th International Conference on Robotics, Intelligent Control and Artificial Intelligence IEEE出版(ISBN: 979-8-3315-6934-1),IEEE Xplor…

企业数字化转型浪潮下,如何选择最适合的项目管理工具?

企业数字化转型浪潮下,如何选择最适合的项目管理工具? 随着数字化转型进程加速,项目管理工具已成为企业提升协作效率的关键基础设施。根据Gartner最新调研数据,2023年全球项目管理软件市场规模达到59亿美元,年增长…

dify工作流遇到的问题及解决方案

dify工作流遇到的问题及解决方案1、在通过dify粘贴文件url上传时遇到的报错:报错显示无效的url,在浏览器输入这串url能获取到文件,说明是dify读取文件的问题 通过浏览器开发者模式可以得出结果:缺少本地url头 在di…

2025年10月青海视频号运营最新权威推荐榜:专业服务与创意内容引领潮流!

2025年10月青海视频号运营最新权威推荐榜:专业服务与创意内容引领潮流!随着移动互联网的快速发展,短视频平台已经成为企业宣传和品牌推广的重要渠道。在青海地区,视频号作为一种新兴的营销工具,正逐渐受到越来越多…

2025 年玻璃钢水箱生产厂家最新推荐榜单:含 30 吨 / 订做 / 消防 / 方形 / 拼装式 / 屋顶 / 大型产品,从产能与服务维度精选优质企业

当前建筑、化工、食品、医药等行业对玻璃钢水箱的需求日益增长,但市场乱象却让采购者陷入困境。多数厂家存在技术储备薄弱问题,产品质量波动大,难以满足行业严苛标准;部分厂家服务体系残缺,售前咨询模糊、售后响应…

[C++工程框架]gflags和gtest的简单介绍

[C++工程框架]gflags和gtest的简单介绍2025-10-13 11:21 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !…

2025 年水下打捞/打捞手机/打捞黄金/打捞戒指公司推荐榜:聚焦专业与高效,助您精准匹配靠谱服务

随着水上作业场景多元化、个人水下财物保护需求提升及航运事业的蓬勃发展,水下打捞服务已从专业工程领域逐步延伸至民用应急场景,2025 年国内水下打捞市场规模预计持续扩容。但市场快速发展也催生了资质不全、技术薄…

2025年10月通风气楼厂家最新推荐排行榜,工业/商用通风气楼,高效节能通风解决方案提供商!

2025年10月通风气楼厂家最新推荐排行榜,工业/商用通风气楼,高效节能通风解决方案提供商!随着工业和商业建筑对空气质量要求的不断提高,通风气楼作为重要的通风设备,其市场需求也在不断增长。为了帮助筛选通风气楼…

算法练习记录

1、输入两个字符串数据,返回加法运算后的值?public static String addStrings(String num1, String num2) {StringBuilder res = new StringBuilder();int i = num1.length() - 1;int j = num2.length() - 1;int car…

2025 最新活性炭交易服务公司排行榜:实力厂商与新锐品牌权威推荐,含选购指南

当前活性炭行业市场规模持续扩张,应用已渗透自来水处理、食品加工、工业废气净化等数十个领域,但行业内厂商资质悬殊:部分企业原料劣质、工艺落后导致产品吸附性能不达标,部分缺乏专业团队难以提供适配方案,回收环…

【隐语SecretFlow】 Unbalanced PSI Benchmark性能测试报告

导语 2022年10月份,隐语发布了PSI的性能数据,当时就引起了内部和外部用户的广泛关注,具体协议包括:ecdh/kkrt16/bc22协议,这些协议更适合双方数据量差别不大的场景,称为平衡PSI(Balanced PSI)。 在现实的隐私求…

制造业老牌汽配企业如何借助纷享销客CRM实现数字化转型?

作为汽车零部件行业的老牌企业,精成车业近年来积极推进数字化转型,以实现业务流程规范化、数据一体化和管理高效化。通过引入纷享销客 CRM,精成车业在数据驱动决策、运营效率提升等方面取得了显著成效。“ 通过 CRM…

idea使用记录

1、idea设置class文件输出路径 idea设置class文件输出路径

牛客刷题-Day12

动态规划1:线性dp、背包问题,区间 https://ac.nowcoder.com/acm/contest/24213?from=acdiscuss牛客刷题-Day12 今日刷题:\(1056-1061\) 1057 [NOIP2001]统计单词个数 题目描述 给出一个长度不超过 \(200\) 的由小写…

国产代码托管平台Gitee构建企业级安全防线 助力信创产业自主可控

国产代码托管平台Gitee构建企业级安全防线 助力信创产业自主可控 在数字经济加速发展的当下,代码资产已成为企业核心竞争力的重要组成部分。作为国内领先的代码托管平台,Gitee通过构建"预防-控制-追溯"三位…

2025年10月拉伸器批发厂家最新推荐排行榜,液压拉伸器,机械拉伸器,电动拉伸器公司推荐!

2025年10月拉伸器批发厂家最新推荐排行榜,液压拉伸器,机械拉伸器,电动拉伸器公司推荐!随着工业技术的不断进步,拉伸器在各个领域的应用越来越广泛。无论是液压拉伸器、机械拉伸器还是电动拉伸器,选择合适的品牌和…