-
Notifications
You must be signed in to change notification settings - Fork 584
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
从零开始写一个微前端框架-数据通信篇 #21
Labels
docs
Improvements or additions to documentation
Comments
Closed
bailicangdu
added
article
docs
Improvements or additions to documentation
and removed
docs
Improvements or additions to documentation
article
labels
Aug 4, 2021
系列文章看完了, |
EventCenterForMicroApp里的方法为什么formatEventName第二个参数是true? |
理解了from的意思就好 |
讲的真好,看懂了,突然觉得微前端没有庞然大物的感觉了 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
前言
自从微前端框架micro-app开源后,很多小伙伴都非常感兴趣,问我是如何实现的,但这并不是几句话可以说明白的。为了讲清楚其中的原理,我会从零开始实现一个简易的微前端框架,它的核心功能包括:渲染、JS沙箱、样式隔离、数据通信。由于内容太多,会根据功能分成四篇文章进行讲解,这是系列文章的最终篇:数据通信篇。
通过这些文章,你可以了解微前端框架的具体原理和实现方式,这在你以后使用微前端或者自己写一套微前端框架时会有很大的帮助。如果这篇文章对你有帮助,欢迎点赞留言。
相关推荐
开始
架构设计
微前端各个应用本身是独立运行的,通信系统不应该对应用侵入太深,所以我们采用发布订阅系统。但是由于子应用封装在micro-app标签内,作为一个类webComponents的组件,发布订阅系统的弱绑定和它格格不入。
最好的方式是像普通属性一样通过micro-app元素传递数据。但自定义元素无法支持对象类型的属性,只能传递字符串,例如
<micro-app data={x: 1}></micro-app>
会转换为<micro-app data='[object Object]'></micro-app>
,想要以组件化形式进行数据通信必须让元素支持对象类型属性,为此我们需要重写micro-app原型链上setAttribute方法处理对象类型属性。流程图
代码实现
创建文件
data.js
,数据通信的功能主要在这里实现。发布订阅系统
实现发布订阅系统的方式很多,我们简单写一个,满足基本的需求即可。
发布订阅系统很灵活,但太过于灵活可能会导致数据传输的混乱,必须定义一套清晰的数据流。所以我们要进行数据绑定,基座应用一次只能向指定的子应用发送数据,子应用只能发送数据到基座应用,至于子应用之间的数据通信则通过基座应用进行控制,这样数据流就会变得清晰
通过格式化订阅名称来进行数据的绑定通信。
由于基座应用和子应用的数据通信方式不同,我们分开定义。
在入口文件中创建基座应用通信对象。
在沙箱中创建子应用的通信对象,并在沙箱关闭时清空所有绑定的事件。
到这里,数据通信大部分功能都完成了,但还缺少一点,就是对micro-app元素对象类型属性的支持。
我们重写Element原型链上setAttribute方法,当micro-app元素设置data属性时进行特殊处理。
大功告成,我们验证一下是否可以正常运行,在vue2项目中向子应用发送数据,并接受来自子应用的数据。
在react17项目中监听来自基座应用的数据并向基座应用发送数据。
查看控制抬的打印信息:
数据正常打印,数据通信功能生效。
结语
从这些文章中可以看出,微前端的实现并不难,真正难的是开发、生产环境中遇到的各种问题,没有完美的微前端框架,无论是Module Federation、qiankun。micro-app以及其它微前端解决方案,都会在某些场景下出现问题,了解微前端原理才能快速定位和处理问题,让自己立于不败之地。
The text was updated successfully, but these errors were encountered: