前言

上篇主要记录了如果使用 qiankun,本文记录下 qiankun 应用间如何通信。

一、如何划分子应用

在微前端架构中,我们应该按业务划分出对应的子应用,而不是通过功能模块划分子应用。主要原因为:

  1. 在微前端架构中,子应用并不是一个模块,而是一个独立的应用,我们将子应用按业务划分可以拥有更好的可维护性和解耦性。
  2. 子应用应该具备独立运行的能力,应用间频繁的通信会增加应用的复杂度和耦合度。

二、Actions 通信

这是官方提供的应用间的通信方式 - Actions 通信,这种通信方式比较适合业务划分清晰,应用间通信较少的微前端应用场景。

通信原理

qiankun 内部提供了 initGlobalState 方法用于注册 MicroAppStateActions 实例用于通信,该实例有三个方法,分别是:

  • setGlobalState:设置 globalState。设置新的值时,内部将执行浅检查,如果检查到 globalState 发生改变则触发通知,通知到所有的观察者函数。
  • onGlobalStateChange:注册观察者函数。响应 globalState 变化,在 globalState 发生改变时触发该观察者函数。
  • offGlobalStateChange:取消观察者函数。该实例不再响应 globalState 变化。

三、主应用的工作

1、首先,在主应用中注册一个 MicroAppStateActions 实例并导出。

在 main-app 项目中,新建文件 main-app/src/micros/actions.js。

// main-app/src/micros/actions.js
import { initGlobalState } from 'qiankun'// 初始化 state
const initState = {name: 'main-app',msg: '主应用消息'
}
const actions = initGlobalState(initState)export default actions

2、在注册  MicroAppStateActions 实例后,在需要通信的组件中使用该实例,并注册观察者函数。

<!-- main-app/src/components/HelloWorld.vue -->
<template><div class="hello"><h1>{{ msg }}</h1><button @click="handleActions">主应用通信按钮</button></div>
</template><script>
import actions from '@/micros/actions'
export default {name: 'HelloWorld',props: {msg: String},mounted() {// 注册一个观察者函数// state 是变更后的状态,prevState 是变更前的状态actions.onGlobalStateChange((state, prevState) => {console.log("主应用观察者,改变前的值", prevState)console.log("主应用观察者,改变后的值", state)})},methods: {handleActions() {actions.setGlobalState({msg: `主应用消息msg,${Math.random()}`})}}
}
</script><style scoped lang="less">
</style>

点击主应用页面按钮,触发如下图:

四、子应用的工作

1、进入子应用的配置,首先设置一个 Actions 实例。新增文件 vue2-app/src/micros/actions.js。

function emptyAction() {// 警告:提示当前使用的是空 Actionconsole.warn('Current execute action is empty!')
}class Actions {// 默认值为空 Actionactions = {onGlobalStateChange: emptyAction,setGlobalState: emptyAction,}/*** 设置 actions*/setActions(actions) {this.actions = actions}/*** 映射*/onGlobalStateChange(...args) {return this.actions.onGlobalStateChange(...args)}/*** 映射*/setGlobalState(...args) {return this.actions.setGlobalState(...args)}
}const actions = new Actions()
export default actions

2、创建 actions 实例后,需要为其注入真是 Actions。在入口文件 main.js 的 render 函数中注入。

// 部分代码
import actions from '@/micros/actions.js'Vue.config.productionTip = false// 定义一个Vue实例
let instance = null
// 渲染方法
function render(props = {}) {if(props) actions.setActions(props)const { container } = propsinstance = new Vue({router,render: (h) => h(App)}).$mount(container ? container.querySelector('#app'): '#app')
}

3、页面中使用

<template><div class="hello"><h1>{{ msg }}</h1><p>qiankun 主应用带过来的消息:{{microInfo}}</p><button @click="handleActions">子应用按钮</button></div>
</template><script>
import actions from '@/micros/actions.js'
export default {name: 'HelloWorld',data () {return {msg: 'VUE2-APP 子应用',microInfo: {}}},mounted() {// 注册观察者函数actions.onGlobalStateChange(state => {console.log('子应用的观察函数:', state)this.microInfo = state}, true)},methods: {handleActions() {actions.setGlobalState({msg: `子应用传递过来消息,${Math.random()}`})}},
}
</script><style scoped>
</style>

页面展示效果如下图。

至此,主应用与子应用之间的基本通信就建立了。

微前端 - qiankun 应用间通信相关推荐

  1. 基于微前端qiankun的多页签缓存方案实践

    作者:vivo 互联网前端团队- Tang Xiao 本文梳理了基于阿里开源微前端框架qiankun,实现多页签及子应用缓存的方案,同时还类比了多个不同方案之间的区别及优劣势,为使用微前端进行多页签开 ...

  2. qiankun 传统项目配置_微前端 qiankun 项目实践

    原标题:微前端 qiankun 项目实践 作者:zxh1307 https://juejin.im/post/5ea55417e51d4546e347fda9 导语 最近在做微前端的项目 , 过程中真 ...

  3. 微前端qiankun 问题

    微前端qiankun 遇到问题,连接子应用之后报错 We're sorry but micro-front-web3 doesn't work properly without JavaScript ...

  4. 微前端qiankun使用+踩坑

    背景 项目使用qiankun 改造的背景: 项目A.项目B.项目C: 项目A和项目B具有清晰的服务边界,从服务类型的角度能够分为两个项目. 在公司项目一体化的背景下,所有的项目又应该是一个项目. 项目 ...

  5. 微前端qiankun从搭建到部署的实践

    最近负责的新项目用到了qiankun,写篇文章分享下实战中遇到的一些问题和思考. 示例代码: github.com/fengxianqi/-. 在线demo:qiankun.fengxianqi.co ...

  6. py获取前端的参数_微前端 qiankun 项目实践

    (给前端大全加星标,提升前端技能) 作者:zxh1307 https://juejin.im/post/5ea55417e51d4546e347fda9 导语 最近在做微前端的项目 , 过程中真是踩了 ...

  7. 微前端 - qiankun

    前言 qiankun 是一个基于 single-spa 的微前端实现库,旨在帮助大家能更简单.无痛的构建一个生产可用微前端架构系统. 本文主要记录下如何接入 qiankun 微前端.主应用使用 vue ...

  8. 微前端-qiankun

    概念 使用框架:qiankun 介绍: qiankun 是一个基于 single-spa 的微前端实现库,旨在帮助大家能更简单.无痛的构建一个生产可用微前端架构系统. qiankun官网:Go 当使用 ...

  9. 微前端qiankun 子应用使用阿里字体图标不显示

    微前端打包部署后,子应用的iconfont的字体图标显示报错, 原因:打包后请求字体的路径是获取主应用下面的文件 解决方案:将字体图标打包成base64显示 // 打包成base64config.mo ...

最新文章

  1. M2Eclipse:Maven Eclipse插件无法搜索远程库的解决方法
  2. MyBatis动态SQL底层原理分析 与 JavaScript中的Date对象,以及UTC、GMT、时区的关系...
  3. Android官方开发文档Training系列课程中文版:管理音频播放之控制APP的音量与播放
  4. python不合法的布尔表达式_python测试题
  5. JavaScript模拟call和apply的实现
  6. NYOJ-摆方格(贪心)
  7. # [银联复赛]-整数对:数论
  8. 23种设计模式及案例整理分享(建议收藏)
  9. html编写在线打字通,金山打字在线练习版 怎么修改金山打字通打字速度?
  10. 企业数据总线(ESB)和注册服务管理(dubbo)的区别
  11. tar命令下的--exclude
  12. ORACLE内核管理-一致性读取测试
  13. 聚焦低代码SaaS云服务,让企业轻松办公!
  14. CAN通信标准帧和扩展帧
  15. DB2 常用执行语句及命令
  16. CMDB——概念详解
  17. 在ORCAD原理图中怎么去指定器件的封装呢?
  18. 数学分析教程(科大)——1.8笔记+习题
  19. VERSA SASE
  20. Web3:打造一个公平、开发的价值互联网

热门文章

  1. 批量卸载软件脚本python_Python练习小工具——批量删除同名电子书保留指定格式...
  2. 一个可以免费从PC到全球座机和手机打电话的网络电话软件Teltel
  3. FinClip 小程序插件开发大赛开启,十万奖金池等你来拿
  4. Kubernetes 1.24 - 走向成熟的 Kubernetes
  5. 燃气表全国产化电子元件推荐方案
  6. Esri Leaflet 第一个例子:加载ArcGIS底图
  7. 企业网页制作一般流程总结
  8. css布局 图片大小,CSS3 使用网格布局实现的不同尺寸照片墙
  9. uniapp分包,小程序分包处理,详解(图解),手把手从0开始
  10. Sitecore 实用的一些方法