尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Web Components 详解:从 Shadow DOM 到自定义元素,一文搞懂浏览器原生组件体系
Web Components 详解从 Shadow DOM 到自定义元素一文搞懂浏览器原生组件体系Web Components 不是某个框架而是一组浏览器原生 API。它让开发者可以像使用video、input一样创建自己的 HTML 元素比如my-card、user-avatar。它的最大价值在于不依赖框架也能封装组件。无论项目用 React、Vue、Angular还是纯原生开发Web Components 都能复用。Web Components 由哪几部分组成Web Components 主要依赖三个核心能力能力作用关键 APICustom Elements定义自定义元素customElements.define()Shadow DOM封装样式和 DOM 结构attachShadow()HTML Templates提供可复用的模板template、slot它们可以单独使用但组合起来才能发挥完整威力。自定义元素 Custom Elements自定义元素允许你注册一个新的 HTML 标签。classMyButtonextendsHTMLElement{constructor(){super();this.innerHTMLbutton点击我/button;}}customElements.define(my-button,MyButton);使用时直接写my-button/my-button注意自定义元素名称必须包含连字符-例如my-button、user-card不能叫mybutton。这是为了避免和浏览器原生元素冲突。Shadow DOM真正的封装能力Shadow DOM 是 Web Components 最重要的部分。它让组件内部 DOM 和样式与外部隔离。classMyCardextendsHTMLElement{constructor(){super();constshadowthis.attachShadow({mode:open});shadow.innerHTMLstyle .card { border: 1px solid #ddd; border-radius: 8px; padding: 16px; } /style div classcard slot nametitle默认标题/slot slot默认内容/slot /div;}}customElements.define(my-card,MyCard);使用方式my-cardspanslottitle卡片标题/spanp这是卡片内容/p/my-card这里有两个关键点attachShadow()创建影子 DOMslot允许外部插入内容。Shadow DOM 内部的样式不会影响外部外部样式也不会轻易污染内部。这种隔离能力正是组件库封装中最需要的。生命周期方法自定义元素有一套完整生命周期classMyElementextendsHTMLElement{connectedCallback(){// 元素被插入 DOM 时触发}disconnectedCallback(){// 元素从 DOM 移除时触发}adoptedCallback(){// 元素被移动到另一个 document 时触发}attributeChangedCallback(name,oldValue,newValue){// 监听的属性发生变化时触发}}如果需要监听属性变化还要配合observedAttributesstaticgetobservedAttributes(){return[title,disabled];}属性与事件通信组件内部可以通过属性接收数据gettitle(){returnthis.getAttribute(title);}settitle(value){this.setAttribute(title,value);}组件向外通信则推荐使用事件this.dispatchEvent(newCustomEvent(change,{detail:{value:hello},bubbles:true}));外部监听方式document.querySelector(my-input).addEventListener(change,(e){console.log(e.detail.value);});和现代框架怎么配合Web Components 可以和 React、Vue 等框架混合使用。Vue 3 对 Web Components 支持较好可以直接注册import{defineCustomElement}fromvue;importMyComponentfrom./MyComponent.ce.vue;constMyElementdefineCustomElement(MyComponent);customElements.define(my-component,MyElement);React 使用时需要注意属性传递和事件绑定方式例如onChange不会自动映射到 Web Component 的change事件通常需要手动绑定。适用场景Web Components 特别适合这些场景跨框架复用组件设计系统、组件库底层封装微前端中的独立模块浏览器插件、低代码平台、后台系统需要长期维护且不绑定框架的基础能力。它不一定适合所有业务组件。如果项目已经深度依赖 React 或 Vue普通业务组件继续用框架写法会更高效。但如果你希望组件脱离框架生命周期、长期稳定复用Web Components 是非常值得掌握的能力。小结Web Components 并不是要取代 React、Vue而是补齐浏览器原生组件化能力。掌握它之后你会更清楚组件封装的本质DOM 隔离、样式隔离、属性通信、事件通信和生命周期管理。发布时可以在 CSDN 和掘金都加上标签Web Components、前端、组件化、Shadow DOM、自定义元素。如果准备做系列专栏下一篇可以写《Web Components TypeScript 实战封装一个通用按钮组件》技术深度和收藏率都会更高。
RELATED

相关推荐

DeepSeek Harness桌面端深度解析:工作区、插件与多模型路由实战

DeepSeek Harness桌面端深度解析:工作区、插件与多模型路由实战

1. 桌面端来了,为什么这件事比想象中重要DeepSeek Harness 出官方桌面端这件事,我在圈子里看到消息的第一反应不是“终于有 GUI 了”,而是“工作流终于能收敛到一个入口了”。过去一段时间,围绕 DeepSeek 的使用方式基本是三足鼎立…

📅 2026/10/7 6:02:13
Javaweb校园志愿者管理系统:可运行、可修改、可上线的三层架构实战

Javaweb校园志愿者管理系统:可运行、可修改、可上线的三层架构实战

简介:本资源是一套高分(95分以上)JavaWeb课程设计实战项目——校园志愿者管理系统源码与数据库,面向高校计算机专业学生及JavaWeb初学者,聚焦角色权限控制、志愿活动全流程管理与数据统计分析等核心教学难点。压缩包含…

📅 2026/10/7 6:02:13
AI Native研发范式落地手册:从项目宪法到多Agent编排的工程实践

AI Native研发范式落地手册:从项目宪法到多Agent编排的工程实践

1. 从"人肉驱动"到"AI Native":研发范式到底变了什么这两年"AI Native"这个词被喊得震天响,但真正落到团队日常开发里,大多数团队其实还停留在"给 IDE 装个补全插件"的阶段。我见过不少团队号称自己…

📅 2026/10/7 6:02:13
MORE NEWS

更多资讯

📰

YOLO11自定义网络使用AdamW训练报错,换成SGD却正常:优化器兼容性与参数分组排查

最近我在做一个圆环产品的工业视觉检测,遇到了一个比较绕的问题:数据里只标注了一种缺陷,测试时却出现了其他类别的误检,而且有些框出现在产品旁边的背景区域。 当时我的标注类别编号是 1,部署软件固定保留 0&#xf…

📰

分块真相:如何定义RAG的检索基本单元

RAG 里的分块,看起来像是在调分块大小等参数,或者选择一个分割器。但它真正影响的是后续的检索效果,因为分块涉及一个更根本的问题:你准备让什么样的一段内容,成为检索系统里的基本知识单元?这才是分块真正…

📰

SSE轻松实现服务端推送,比WebSocket更简单

01 引言 最近做的业务项目总是遇到到长连接、服务端向前端推送消息的功能点。由于项目中已经集成了现成的WebSocket,也就是没有再重复造轮子。 但是如果单独搭建WebSocket可能会繁琐,能不能更加简单的SSE代替呢?我们一起来试试SSE这门技术。…

📰

贵州智算中心油机降噪工程商怎么筛选?附 2026 项目指标核查清单

【阿九技术速览】【阿九技术速览】贵州智算中心运营方、数据中心机电工程负责人、油机降噪项目采购决策者 > - 解决痛点 :油机安装降噪工程中“施工与验证脱节、降噪后系统可靠性无保障、本地化响应缺失”等典型问题; - 核心方案 :五维筛选框架 降…

📰

ponytail插件与skill实战:从安装到工作流自动化

1. 从“ponytail”这个热搜词说起:它到底指什么最近一段时间,“ponytail”这个词在技术社区和效率工具圈子里出现的频率明显高了起来。如果你只是把它当成一个英文单词去理解,那它确实就是“马尾辫”的意思,没什么特别的。但结合“…

📰

pstack的thermo-nuclear-code-quality-review:终极可维护性审计详解

pstack的thermo-nuclear-code-quality-review:终极可维护性审计详解 【免费下载链接】pstack-claude Claude Code, Codex, Copilot, Pi, OpenCode, Gemini, and Prime Agent versions of Potetos pstack. Rigorous agent workflows with Cursor primitives translat…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬