发布订阅模式通过事件中心实现组件间解耦,支持跨层级通信。使用EventHub类可实现on、emit、off方法,用于订阅、发布和取消事件。组件A触发事件,组件B监听并响应,无需直接引用。建议统一事件常量、及时取消订阅以防内存泄漏,可扩展once功能,大型项目推荐mitt等库。该模式适用于非父子组件通信与全局状态通知,提升代码可维护性。

在前端开发中,组件之间的通信是常见需求。当组件层级复杂或跨层级通信时,直接的父子传参会变得繁琐。发布订阅模式(Pub-Sub)是一种解耦组件依赖的有效方式,能让多个组件通过事件进行通信,而无需彼此了解对方的存在。
发布订阅模式是一种消息传递机制:
这种模式让组件之间松耦合,适合用于非父子关系组件通信、全局状态通知等场景。
我们可以用 J*aScript 实现一个轻量的 EventHub 类,支持 on、emit、off 方法。
class EventHub {
constructor() {
// 存储所有事件及其回调函数
this.events = {};
}
// 订阅事件
on(event, callback) {
if (!this.events[event]) {
this.events[event] = [];
}
this.events[event].push(callback);
}
// 发布事件,触发所有回调
emit(event, data) {
if (this.events[event]) {
this.events[event].forEach(callback => callback(data));
}
}
// 取消订阅
off(event, callback) {
if (this.events[event]) {
this.events[event] = this.events[event].filter(cb => cb !== callback);
}
}
}
假设我们有两个独立组件:一个按钮组件发送通知,一个显示组件接收并更新内容。
白瓜面试
白瓜面试 - AI面试助手,辅助笔试面试神器
162
查看详情
// 创建全局事件中心实例
const eventHub = new EventHub();
// 组件 A:发布事件
function ButtonComponent() {
function handleClick() {
eventHub.emit('message', '按钮被点击了!');
}
return <button onclick="handleClick()">发送消息</button>;
}
// 组件 B:订阅事件
function DisplayComponent() {
const display = document.getElementById('display');
// 组件挂载时订阅事件
eventHub.on('message', (msg) => {
display.innerText = msg;
});
}
// 初始化两个组件
ButtonComponent();
DisplayComponent();
点击按钮后,DisplayComponent 会接收到消息并更新页面内容,两个组件没有任何直接引用,完全通过事件通信。
虽然发布订阅模式灵活,但也需注意以下几点:
基本上就这些。发布订阅模式简单却强大,掌握它能让你更好地处理复杂的组件通信问题。
以上就是J*aScript组件通信_发布订阅模式实现的详细内容,更多请关注其它相关文章!
# 多个
# 襄城搜索seo排名推广
# 通山网站建设
# 启东探意网站推广
# 东莞建设网站哪里好
# 长安区营销推广公司
# 韶关网站推广知识
# 伴唱网站建设美丽
# 湖南网站建设定位设想
# 网站seo标题教学视频
# 营销网站建设的重点
# 可以用
# 没有任何
# javascript
# 让你
# 是在
# 文件上传
# 如何用
# 数据结构
# 是一种
# 回调
# 前端开发
# 回调函数
# 前端
# java
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
小红书网页版在线直达 小红书网页版免费登录入口
菜鸟裹裹怎样获得取件码_菜鸟裹裹获得取件码步骤
mysql导入sql文件能分批导入吗_mysql分批次导入大sql文件的实用技巧
msn官方入口2025登录 msn官网2025直达首页入口
之了课堂app做题入口
漫蛙manwa2网页版书签同步链接_漫蛙manwa多设备登录入口
PHP页面重载时变量值不重置的实现方法
Win10如何关闭开机锁屏界面_Windows10跳过锁屏直接登录设置
Lar*el Dusk 测试中管理浏览器权限:以剪贴板访问为例
qq邮箱怎么注册_QQ邮箱注册步骤与注意事项
实现可重用自定义Python Range类
win11怎么设置默认终端为Windows Terminal Win11替代CMD和PowerShell【技巧】
b站怎么查看视频的码率_b站视频码率查看方法
如何使用CSS Grid实现“大方块左侧,小方块右侧垂直堆叠”的水平布局
《漫蛙manwa2》防走失网页版链接2025
Flexbox布局中Stencil组件宽度不显示问题解析与:host尺寸控制
纯CSS实现滚动时动态时间轴线条颜色填充效果
Mac怎么关闭按键声音_Mac键盘打字音效设置
天堂漫画网页版在线阅读 天堂漫画手机版入口
咸鱼怎么设置仅粉丝可见的动态_咸鱼动态粉丝可见设置方法
学习通网页版个人登录_学习通网页版个人账户登录入口
《搜书吧》阅读书籍方法
《植物大战僵尸3》火龙草作用介绍
发博客与长微博技巧
《下一站江湖2》风神腿获取攻略
PHP动态导航按钮:根据用户登录状态切换链接与文本
如何在mysql中使用索引提示_mysql索引提示优化方法
如何通过settings.json个性化您的VS Code体验
猫眼app抢票快还是小程序快
教育查询官方网站入口 教育个人档案查询免费官网
《东方财富》条件单关闭方法
《书耽》更换手机号方法
win11资源管理器标签页怎么用 Win11文件管理器多标签高效操作【新功能】
如何取消数字签名
WooCommerce 新客户订单自动添加管理员备注教程
《kimi智能助手》制作ppt教程
C++中的explicit关键字有什么作用_C++类型转换控制与explicit使用
《盗墓笔记手游》技能介绍
猫眼电影app怎么查询电影院的营业时间_猫眼电影影院营业时间查询教程
小米倒班助手添加日历提醒
Keras中Convolution2D层及其核心辅助层详解
win11如何运行chkdsk命令 Win11检查和修复磁盘逻辑错误教程【修复】
qq音乐官方网站入口_qq音乐在线听歌网页版链接
php如何实现多域名共享session_php存储session到redis与跨域读取配置
C#解析并修改XML后保存 如何确保格式与编码的正确性
Python自动化抓取GBGB赛狗比赛结果:日期范围与赛道筛选教程
感染了幽门螺杆菌一定会导致胃癌吗?蚂蚁庄园今日答案最新11.30
荣耀magicv5怎么上手测评
海外搜索引擎推广效果怎么样,怎么分析效果!
谷歌邮箱官方入口链接 谷歌邮箱网页版电脑端快速登录
2025-11-27
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。