应用通信

应用通信

基于URL

其实有一种最朴素的通讯方案,就是基于URL。前端有一种设计叫做URL中心设计,就是说你的URL完全决定了你页面展示出来是什么样子。假如我的应用里有一个列表,有一个分页,当你点下一页的时候,是不是就产生了一个在第二页的query参数?你可能会把这个参数同步到路由上,这样你把这个链接分享给别人的时候,别人就能看到跟你一样的页面。

我们其实完全可以把这种路由翻译成看作是一个函数调用,比如说这里的路由b/function-logquery参数dataaaa ,我们可以把这个路由URL理解为我在调用B应用的log函数,这就像一次函数调用一样。当我们从应用A跳去应用B,对应路由发生变化的时候,就是触发了一次函数调用,触发了一次通信。

所以路由实际上也有通信的功能。这种通信方式是完全解耦的,但是缺点就是比较弱。

发布/订阅模型

另一种应用间通信的模型就是我们可以挂一个事件总线。应用之间不直接相互交互,我都统一去事件总线上注册事件、监听事件,通过这么一个发布订阅模型来做到应用之间的相互通信。

有趣的是,我们什么框架都不需要引入,什么第三方库都不需要引入,这里我们有一个天然的事件总线:windowCustomEvent 。我们可以在window上监听一个自定义事件,然后在任意地方派发一个自定义事件,我们可以天然的通过自定义事件来做到应用之间相互通信。

基于 CustomEvent 的发布/订阅模型

基于Props

大家写过ReactVue都会知道,我们在写一个input的时候,会把valueonChange两个props都传给了底下的输入框。这里我们也可以同样做,我们主应用是可以传递一些props给子用的。我们把stateonGlobalStateChange (就是监听函数,还有我们的onChange (就是setGlobalState)三个都传给子应用。我们基于props也就可以实现一个简单的主子应用之间通信。

那当我们这样子实现了主子应用之间通信之后,我们子应用与子应用之间通信怎么做?让大家都跟主应用通信就行了。子应用和子应用之间就不要再多加一条通信链路了,我们大家都基于props和主应用通信,这样也能解通信问题。

上一页