首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >微前端:微前端Pubsub系统

微前端:微前端Pubsub系统
EN

Stack Overflow用户
提问于 2019-12-27 11:21:00
回答 1查看 1.5K关注 0票数 1

我正在通过遵循微前端架构创建一个大型应用程序。比方说,我将我的整个应用程序划分为5个Micro (micro A(以Vue)、micro B(以Vue)、micro C(以角)、micro D (in React)和一个shell应用程序My-App-Shell (在Vue中))

我使用pubsub(一个以JavaScript编写的基于主题的发布/订阅库)在微应用程序中的不同组件之间通信。我的每一个微型应用程序都完美地使用这个公共子系统在其自己的组件之间进行通信。但是我需要一个公共子系统(由我的shell应用程序管理)来在不同的微应用程序之间进行通信。

如何做到这一点?

EN

回答 1

Stack Overflow用户

发布于 2020-02-02 13:23:39

您可以在这里轻松地在CustomEvent之上构建一个抽象:

代码语言:javascript
运行
复制
const handlers = {};

window.publish = (topic, message) => {
  var ev = new CustomEvent('pubsub', {
    detail: { topic, message },
  });
  document.body.dispatchEvent(ev);
};

window.subscribe = (topic, handler) => {
  const topicHandlers = handlers[topic] || [];
  topicHandlers.push(handler);
  handlers[topic] = topicHandlers;
};

window.unsubscribe = (topic, handler) => {
  const topicHandlers = handlers[topic] || [];
  const index = topicHandlers.indexOf(handler);
  index >= 0 && topicHandlers.splice(index, 1);
};

document.body.addEventListener('pubsub', ev => {
  const { topic, message } = ev.detail;
  const topicHandlers = handlers[topic] || [];
  topicHandlers.forEach(handler => handler(message));
});

(演示见:https://jsfiddle.net/qo5nca71/)

在大多数情况下,这应该就足够了。如果你想得到更多的“安全”(例如,微前沿不能改变抽象,这是在推动。我建议使用一种更复杂的方法,比如Piral中的事件机制(参见https://github.com/smapiot/piral)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59500036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档