使无头组件易于设计
今日不肯埋头,明日何以抬头!每日一句努力自己的话哈哈~哈喽,今天我将给大家带来一篇《使无头组件易于设计》,主要内容是讲解等等,感兴趣的朋友可以收藏或者有更好的建议在评论提出,我都会认真看的!大家一起进步,一起学习!

无头组件只是一个无样式组件,还是还有更多内容?
网络已经通过要求定义样式来将样式与内容分开
在 css 中而不是 html 中。这种架构允许每个网页都采用全局
设计标准,无需定义任何特定于页面的样式。
随着网络演变成一个应用程序平台,开发人员寻找方法
他们不断增长的代码库更易于维护。如今,事实上的策略是
组织应用程序代码就是定义小型、轻量级的组件,这些组件可以
一起组成。因此,组件成为
中的组成单位
现代网络开发。
为了封装,组件通常会同时定义 html 和 css。
虽然这使它们更容易创作,但它们也可能更难
紧密结合到现有的设计系统中。这一点尤其正确
对于从外部供应商进口的第三方组件。
无头组件通过重新引入
之间的分离来解决这一挑战
内容和风格。然而现在分离是沿着组件边界的
反对 html 和 css 之间的关系。它们是创建出色的无头组件的关键
关键在于设计组件的接口,以便开发人员可以
清晰、轻松地应用自己的风格。
转发相关道具
从最基本的意义上来说,无头组件只是一个无样式的组件。
开发人员必须能够将自己的 css 应用到 html 元素中
组件定义.
对于简单的组件,这可能只是转发 classname 的问题
prop 到根元素,以便开发人员可以在他们的
中使用类选择器
css.
如果你的组件与原生 html 元素具有相同的语义,你可以使用
来自 react 的 componentprops 类型,以确保所有相关的 props
可转发。请记住省略任何您不希望用户使用的道具
您的组件能够覆盖。
import { type componentprops } from 'react'
function submitbutton({ ...props }: omit<componentprops<'button'>, 'type'>) {
return <button type="submit" {...props} />
}
提供预定义类
对于包含一个或多个子元素的组件,开发者可能会
想要单独设置每个元素的样式。
支持这一点的一个策略是依赖
css 组合器。
例如,无头画廊组件的样式可能如下:
/* root container */
.gallery {
}
/* gallery items container */
.gallery > ul {
}
/* gallery item */
.gallery > ul > li {
}
/* next and previous buttons */
.gallery button {
}
但是这种方法产生了一个巨大的问题,因为现在
的内部 html 结构
该组件是其公共 api 的一部分。这会阻止您修改
稍后构建,而不会破坏下游代码。
更好的策略是为每个主要子元素预定义类。这边
开发人员可以使用类选择器,而不依赖于任何特定的 html
结构:
.xyz-gallery {
}
.xyz-gallery-next-button {
}
.xyz-gallery-previous-button {
}
.xyz-gallery-items-container {
}
.xyz-gallery-item {
}
记住给你的类添加前缀,这样它们就不会与
冲突
开发者自己的风格。
支持自定义布局
提供预定义的类可能是使开发人员能够实现的最快方法
设置你的组件的样式。然而,这种方法的一个缺点是
html 结构无法自定义。
这可能并不重要。毕竟,纯 html 的使用方式已经相当灵活了
可以渲染。然而,有时开发人员会按顺序获取额外的 html
来完成某些设计。如果您查看几乎所有的源代码
网站,您可能会看到大量无语义的
其唯一目的是定义弹性或网格布局,直观地对子项进行分组
边框内的元素或创建新的堆叠上下文。
您可以通过将无头组件拆分为
来支持此类用例
多个相关组件。这样开发者就可以自由添加自己的
将元素布局到组件。例如,开发人员可以嵌入 next 和
自定义 flexbox 容器中图库示例中的上一个按钮:
<gallery>
<galleryitems classname='gallery-items-container'>
{data.map((item) => (
<galleryitem key={item.id}>{item.content}</galleryitem>
))}
</galleryitems>
<div classname='gallery-buttons-container'>
<gallerypreviousbutton>
<gallerynextbutton>
</div>
</gallery>
.gallery-items-container {
}
.gallery-buttons-container {
display: flex;
gap: 0.5rem;
justify-content: flex-end;
}
这些类型的组件通常使用
实现
要传递的上下文
它们之间的数据。他们需要更多的工作来设计、实施和
文档。然而,它们所带来的多功能性通常意味着额外的努力
值得。
允许组件被覆盖
少数用例需要无头组件管理布局
其子组件。一个例子可能是层次树视图
允许通过拖放对其项目进行重新排序。另一个用例可能是
允许单页应用程序用 a 替换默认的锚元素
有助于客户端路由的自定义链接组件。
允许通过 props 覆盖正在渲染的实际子组件:
<treeview
nodes={[...]}
components={{
customrow,
customdragpreview: (props) => <div classname="drag-preview" {...props} />
}}
/>
这使开发人员可以完全控制每个子项中渲染的内容
组件,同时允许无头组件管理其整体
结构.
通过道具。例如,这个按钮组件允许开发者渲染它
作为其他东西:
import { type elementtype } from 'react'
function headlessbutton({ as, ...props }: { as?: elementtype }) {
const component = as ?? 'button'
return <component {...props} />
}
例如,为了让辅助技术将按钮视为链接,
开发人员可以指定应该使用锚元素来渲染
按钮:
<HeadlessButton as="a">Actually a link</HeadlessButton>概括
无头组件比不包含任何组件的组件要多得多
风格。优秀的无头组件是完全可扩展的,并允许开发人员
自定义整个内部 html 结构。
今天带大家了解了的相关知识,希望对你有所帮助;关于文章的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~
PHP 函数引用参数与匿名函数
- 上一篇
- PHP 函数引用参数与匿名函数
- 下一篇
- 使用 Java 进行函数式数据转换
-
- 文章 · 前端 | 2小时前 |
- CSSz-index层级控制全攻略
- 394浏览 收藏
-
- 文章 · 前端 | 2小时前 |
- PostCSS插件配置全攻略
- 258浏览 收藏
-
- 文章 · 前端 | 2小时前 | 背景 CSS渐变 linear-gradient radial-gradient 颜色停点
- CSS渐变色详解:linear-gradient与radial-gradient用法
- 402浏览 收藏
-
- 文章 · 前端 | 3小时前 | 主题切换 color属性 currentColor 颜色统一管理 减少重复代码
- CSScurrentColor统一颜色管理技巧
- 160浏览 收藏
-
- 文章 · 前端 | 3小时前 |
- CSS导入外部样式表方法详解
- 189浏览 收藏
-
- 文章 · 前端 | 3小时前 |
- WebCryptoAPI:JavaScript密码学实战教程
- 140浏览 收藏
-
- 文章 · 前端 | 3小时前 |
- JS对象属性变化监听全解析
- 310浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- ChatExcel酷表
- ChatExcel酷表是由北京大学团队打造的Excel聊天机器人,用自然语言操控表格,简化数据处理,告别繁琐操作,提升工作效率!适用于学生、上班族及政府人员。
- 3190次使用
-
- Any绘本
- 探索Any绘本(anypicturebook.com/zh),一款开源免费的AI绘本创作工具,基于Google Gemini与Flux AI模型,让您轻松创作个性化绘本。适用于家庭、教育、创作等多种场景,零门槛,高自由度,技术透明,本地可控。
- 3402次使用
-
- 可赞AI
- 可赞AI,AI驱动的办公可视化智能工具,助您轻松实现文本与可视化元素高效转化。无论是智能文档生成、多格式文本解析,还是一键生成专业图表、脑图、知识卡片,可赞AI都能让信息处理更清晰高效。覆盖数据汇报、会议纪要、内容营销等全场景,大幅提升办公效率,降低专业门槛,是您提升工作效率的得力助手。
- 3433次使用
-
- 星月写作
- 星月写作是国内首款聚焦中文网络小说创作的AI辅助工具,解决网文作者从构思到变现的全流程痛点。AI扫榜、专属模板、全链路适配,助力新人快速上手,资深作者效率倍增。
- 4540次使用
-
- MagicLight
- MagicLight.ai是全球首款叙事驱动型AI动画视频创作平台,专注于解决从故事想法到完整动画的全流程痛点。它通过自研AI模型,保障角色、风格、场景高度一致性,让零动画经验者也能高效产出专业级叙事内容。广泛适用于独立创作者、动画工作室、教育机构及企业营销,助您轻松实现创意落地与商业化。
- 3811次使用
-
- JavaScript函数定义及示例详解
- 2025-05-11 502浏览
-
- 优化用户界面体验的秘密武器:CSS开发项目经验大揭秘
- 2023-11-03 501浏览
-
- 使用微信小程序实现图片轮播特效
- 2023-11-21 501浏览
-
- 解析sessionStorage的存储能力与限制
- 2024-01-11 501浏览
-
- 探索冒泡活动对于团队合作的推动力
- 2024-01-13 501浏览

