J*aScript组件化核心是封装可复用、独立状态与行为的UI单元,可通过Class、Custom Elements或函数式+虚拟DOM三种方式实现,关键在于作用域隔离、生命周期管理、配置传递与通信机制。

J*aScript 实现组件化,核心是封装可复用、独立状态和行为的 UI 单元。现代开发中,组件化不依赖框架也能实现,关键在于隔离作用域、管理生命周期、支持配置与通信。下面从原生 JS 出发,讲清楚如何定义和组织组件。
ES6 Class 是最直观的组件定义方式,封装模板、状态、渲染逻辑和事件处理:
示例:一个计数器组件
class Counter {
constructor({ initial = 0, onChange }) {
this.count = initial;
this.onChange = onChange;
}
render() {
return `
<div class="counter">
<span>Count: ${this.count}</span>
<button onclick="this.parentElement.__handleInc()">+</button>
<button onclick="this.parentElement.__handleDec()">−</button>
</div>
`;
}
mount(el) {
el.innerHTML = this.render();
// 绑定私有处理函数(注意:实际项目建议用事件委托或 addEventListener)
const root = el.querySelector('.counter');
root.__handleInc = () => this.increment();
root.__handleDec = () => this.decrement();
}
increment() {
this.count++;
this.onChange?.(this.count);
}
decrement() {
this.count--;
this.onChange?.(this.count);
}
}
// 使用
const counter = new Counter({ initial: 5, onChange: (v) => console.log('new value:', v) });
counter.mount(document.getElementById('app'));
Web Components 标准提供了原生、跨框架的组件能力。通过 customElements.define() 注册一个自定义标签:
HTMLElement,使用 constructor 和 connectedCallback 初始化shadowRoot 封装样式和结构,避免全局污染static get observedAttributes() 响应属性变化attributeChangedCallback 处理 props 更新示例:
class MyCounter extends HTMLElement {
static get observedAttributes() { return ['count']; }
constructor() {
super();
this.attachShadow({ mode: 'open' });
this.count = +this.getAttribute('count') || 0;
}
connectedCallback() {
this.render();
}
attributeChangedCallback(name, oldValue, newValue) {
if (name === 'count') {
this.count = +n
ewValue || 0;
this.render();
}
}
render() {
this.shadowRoot.innerHTML = `
<style>button { margin: 0 4px; }</style>
<div>
<span>Count: ${this.count}</span>
<button onclick="this.parentNode.host.inc()">+</button>
<button onclick="this.parentNode.host.dec()">−</button>
</div>
`;
}
inc() {
this.count++;
this.setAttribute('count', this.count);
this.dispatchEvent(new CustomEvent('change', { detail: this.count }));
}
dec() {
this.count--;
this.setAttribute('count', this.count);
this.dispatchEvent(new CustomEvent('change', { detail: this.count }));
}
}
customElements.define('my-counter', MyCounter);
之后即可在 HTML 中直接使用:<my-counter count="3"></my-counter>,并监听事件:el.addEventListener('change', e => console.log(e.detail))。
若追求更接近 React 的写法,可结合简易虚拟 DOM(如 Preact 或手写 h()/render 函数)实现函数式组件:
适合中等复杂度、需局部重绘的场景,比 Class 更简洁,比 Custom Elements 更灵活。
组件不是孤岛,需考虑协作方式:
dispatchEvent)、回调函数(props.onXxx)、或发布订阅模式<slot></slot> 支持内容分发;Class 组件可通过 props.children 或 innerHTML 注入基本上就这些。组件化不是某一种写法,而是思维方式——把界面拆成“能独立存在、测试、复用”的单元。选 Class 还是 Custom Elements,取决于你是否需要强封装、跨框架兼容或服务端渲染支持。不复杂但容易忽略的是:状态归属、副作用清理、错误边界和可访问性(a11y)设计。
以上就是j*ascript如何实现组件化_如何定义组件的详细内容,更多请关注其它相关文章!
# 可通过
# 鞍山seo排名软件公司
# 肇庆seo网络营销全网推广
# 河北网站建设要多少钱
# 如何推广营销水果产品呢
# 天津外贸网站建设合同
# 推广苹果营销方案
# 贵州网站建设欢迎致电
# 永川短视频seo
# 枣强网站建设哪家好
# 上海免费公司网站建设
# 的是
# 插槽
# 如何用
# 有什么区别
# 关键在于
# react
# 复用
# 回调
# 自定义
# 如何实现
# 重绘
# 作用域
# ai
# 回调函数
# app
# node
# js
# html
# java
# es6
# javascript
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
CodeIgniter 3 中基于 MySQL 数据高效生成动态图表教程
魔法祈幻界兑换码礼包大全
漫蛙app官方版手机正版入口-漫蛙漫画manwa在线漫画正版入口
微信朋友圈怎么设置三天可见 微信朋友圈设置指定天数可见步骤【教程】
《盗墓笔记手游》技能介绍
小米倒班助手添加日历提醒
实时数据流中高效查找最小值与最大值
CSS过渡与滚动滚动事件结合应用_scroll与transition动画
mysql中如何配置字符集和排序规则_mysql字符集排序配置
Python对象引用与属性赋值:理解链表中的行为
Composer reinstall命令重装损坏的包
《火影忍者:木叶高手》快速升级攻略
《单词速记宝》设置学习计划方法
《绝区零》2.3前瞻|直播|内容介绍
VS Code的时间线(Timeline)视图:您的代码时光机
4399正版网页版入口高清直达链接
PHP魔术方法__set与__isset:设计考量、性能权衡与静态分析的视角
一加 Ace 6V 快充无法启用_一加 Ace 6V 充电优化
XPath动态元素定位:如何精准选择文本内容变化的元素
Sublime Text怎么关闭自动完成_Sublime禁用Auto Complete设置
Word 2003字体大小设置方法
CSS如何使用outline-offset与颜色组合突出元素边框
《伊瑟》凶影追缉库卢鲁boss攻略
向往的生活小游戏启动处_向往的生活小游戏立即启动
《360浏览器》自动保存账号密码设置方法
C++如何使用CMake构建项目_C++ CMakeLists.txt编写入门教程
J*aScript深度克隆:实现高效、健壮与安全的复杂对象复制
优酷下载视频的清晰度怎么选_优酷缓存清晰度设置与选择指南
mysql中外键约束如何使用_mysql FOREIGN KEY操作
江苏大剧院会员卡购买步骤
PHP中动态类名访问的类实例类型提示与静态分析实践
电脑桌面图标怎么变大变小_Windows个性化设置第一课【新手入门】
抖音小程序怎么开通?小程序开通条件是什么?
《漫蛙manwa2》防走失网页版链接2025
基于 Flink 和 Kafka 实现高效流处理:连续查询与时间窗口
《微信》视频号原创声明开启方法
泰拉瑞亚水晶无法放置问题
Yandex无需登录畅游 俄罗斯搜索引擎最新官网指南
企查查官网和爱企查 企查查企业查询官网入口
《原神》月之一版本新增书籍一览
Scipy Sparse CSR 矩阵非零元素行级遍历的最佳实践
Lar*el怎么实现全文搜索_Lar*el Scout集成Algolia教程
食品生产用水只要符合国家规定的生活饮用水卫生标准就可以吗
苹果iPhone14ProMax如何新建AppleID_iPhone14ProMax新建AppleID具体流程
poki官网最新入口 poki小游戏大全入口
快手网页版官方访问 快手网页版页面在线打开
《百度畅听版》关闭兴趣推荐方法
家里的小飞虫总是不断,用什么方法可以彻底根除?
Win10如何关闭开机锁屏界面_Windows10跳过锁屏直接登录设置
怎么恢复删除的电脑文件_数据恢复软件使用教程
2025-12-18
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。