中国最好的网站建设有哪些做的好的家装网站
2026/5/21 12:44:18 网站建设 项目流程
中国最好的网站建设有哪些,做的好的家装网站,软件开发公司税收优惠政策,网站开发怎么自学Web Components 封装实战#xff1a;打造可复用的跨框架组件在 React、Vue、Angular 三分天下的今天#xff0c;组件化开发早已深入人心。但你是否遇到过这样的场景#xff1a;公司内部既有 Vue2/3 项目#xff0c;也有 React 项目#xff0c;还需要维护一些 jQuery 老系统…Web Components 封装实战打造可复用的跨框架组件在 React、Vue、Angular 三分天下的今天组件化开发早已深入人心。但你是否遇到过这样的场景公司内部既有 Vue2/3 项目也有 React 项目还需要维护一些 jQuery 老系统。为了保持 UI 风格统一难道要为每个框架都写一套组件库吗Web Components提供了一种标准化的解决方案它允许你创建可重用的自定义元素这些元素在任何框架中都能像原生 HTML 标签一样工作。本文将带你从零实现一个 Web Component并探讨其在微前端与跨框架场景下的应用。TL;DR核心三剑客Custom Elements自定义标签、Shadow DOM样式隔离、HTML Templates结构复用。生命周期connectedCallback挂载、disconnectedCallback卸载、attributeChangedCallback属性变化。跨框架在 Vue 中直接用my-btn在 React 中需处理自定义事件的兼容性。最佳实践推荐使用Lit等轻量库简化开发而非裸写原生 API。1. 原生实现手写一个 UserCard 组件我们来实现一个user-card组件支持avatar和name属性且样式不被外部污染。// 1. 定义 HTML 模板consttemplatedocument.createElement(template);template.innerHTMLstyle .card { display: flex; align-items: center; padding: 16px; border: 1px solid #eee; border-radius: 8px; } img { width: 50px; height: 50px; border-radius: 50%; margin-right: 16px; } h3 { margin: 0; font-size: 18px; } /style div classcard img / div h3/h3 slot namedesc/slot !-- 插槽支持 -- /div /div;// 2. 创建自定义类classUserCardextendsHTMLElement{constructor(){super();// 开启 Shadow DOM实现样式隔离this.attachShadow({mode:open});this.shadowRoot.appendChild(template.content.cloneNode(true));}// 3. 监听属性变化staticgetobservedAttributes(){return[avatar,name];}attributeChangedCallback(name,oldValue,newValue){if(nameavatar){this.shadowRoot.querySelector(img).srcnewValue;}elseif(namename){this.shadowRoot.querySelector(h3).innerTextnewValue;}}}// 4. 注册组件window.customElements.define(user-card,UserCard);使用方式无论是在 React、Vue 还是纯 HTML 中都可以直接这样用user-cardavatarhttps://api.uomg.com/api/rand.avatarnameFrugepslotdescSenior Frontend Developer/p/user-card2. 核心技术深度解析Shadow DOM真正的样式隔离在 Web Components 之前为了防止样式冲突我们不得不使用 BEM 命名规范或 CSS Modules。Shadow DOM 从浏览器层面解决了这个问题外部进不去全局 CSS 无法影响 Shadow Root 内部除了 CSS 变量。内部出不来组件内的样式也不会污染全局。Slot 插槽机制Web Components 的插槽机制与 Vue 非常相似事实上 Vue 的插槽设计灵感正来源于此slot默认插槽。slot namexxx具名插槽。3. 进阶使用 Lit 简化开发裸写原生 API 比较繁琐如手动 diff 更新 DOM。Google 推出的Lit库前身是 Polymer极大地简化了这一过程它基于lit-html渲染引擎体积极小。import{LitElement,html,css}fromlit;import{customElement,property}fromlit/decorators.js;customElement(simple-counter)exportclassSimpleCounterextendsLitElement{staticstylescssbutton { color: blue; };property({type:Number})count0;render(){returnhtmlpCount:${this.count}/p button click${this._increment}/button;}private_increment(){this.count;// 触发自定义事件this.dispatchEvent(newCustomEvent(count-changed,{detail:this.count,bubbles:true,composed:true// 允许穿透 Shadow DOM}));}}4. 框架集成指南Vue (2.x / 3.x)Vue 对 Web Components 的支持非常完美。配置在 Vite/Webpack 中配置compilerOptions.isCustomElement告诉 Vue 编译器哪些标签是自定义元素不要报错。绑定simple-counter:countcountcount-changedhandleCount/React (16/17/18)React 在 19 之前对 Web Components 的支持略显尴尬主要在于事件系统和属性传递。属性React 会将所有 props 当作 HTML Attribute字符串传递无法传递复杂对象数组/对象。需使用ref手动赋值。事件React 的合成事件系统无法监听 Web Component 的自定义事件。需使用useRefaddEventListener。React 19已全面改善对 Web Components 的支持上述问题基本解决。5. 适用场景与局限性适用场景跨技术栈组件库公司内部有多种技术栈需要统一的 UI 基础组件Button, Icon, Input。微前端在微前端架构中子应用可能使用不同框架Web Components 是天然的隔离边界。嵌入式微件如聊天窗口、反馈按钮可直接嵌入任意第三方网站。局限性SSR 支持Shadow DOM 的服务端渲染SSR目前仍处于实验阶段Declarative Shadow DOM。样式定制由于强隔离外部很难通过 CSS 覆盖内部样式通常需要组件暴露大量的 CSS Variables 供外部调整。无障碍性 (A11y)需要手动处理 Shadow DOM 内部的焦点管理和 ARIA 属性。6. 总结Web Components 不是为了取代 React/Vue而是为了补充组件互操作性的缺失。在构建设计系统Design System或跨框架微前端应用时它是一个极具前瞻性的选择。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询