微前端micro-app 子应用 调用父应用方法

2024-04-26 20:04

本文主要是介绍微前端micro-app 子应用 调用父应用方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考:micro-app官方文档

场景描述

父应用存储一套vuex数据,其中包含登录信息token等,登录信息透传给子应用使用。
当子应用中的接口返回“登录失效”时,需要清空父应用vuex中的登录相关信息,并且跳转到登录页面。

原本vuex中有一个名为 LogOut 的action(如下),正常情况直接通过this.$store.dispatch("LogOut") 触发即可。

	...// 退出系统LogOut({ commit, state }) {return new Promise((resolve, reject) => {logout(state.token).then(() => {commit('SET_TOKEN', '')commit('SET_ROLES', [])commit('SET_PERMISSIONS', [])removeToken()resolve()}).catch(error => {reject(error)})})},....

但是微前端改造之后,子应用自身没有 vuex 的实例,最后考虑通过 子应用向主应用发送数据 的方式实现功能,原理:

解决办法

  1. 触发条件下,子应用通过 dispatch 向 父应用传递参数:
// 子应用 window.microApp.dispatch 传值
...
window.microApp.dispatch({type: 'callLogOut'})
...
  1. 父应用 通过 绑定监听函数 addDataListener 监听子应用传递的数据
// 父应用监听数据变化
...
microApp.addDataListener(appName, handlerFun);
...
发现问题:父应用只能监听到一次数据变化

上述代码写好之后,项目运行,发现父应用只能监听到一次数据变化,之后再次触发该特定场景,父组件始终无法监听到数据变化,即使子应用明明触发的 dispatch

经仔细查阅 父子应用传值文档,发现:

dispatch只接受对象作为参数,它发送的数据都会被缓存下来。 micro-app会遍历新旧值中的每个key判断值是否有变化,如果所有数据都相同则不会发送(注意:只会遍历第一层key),如果数据有变化则将新旧值进行合并后发送。

例如:

// 第一次发送数据,记入缓存值 {name: 'jack'},然后发送 
window.microApp.dispatch({name: 'jack'})
// 第二次发送数据,将新旧值合并为 {name: 'jack', age: 20},记入缓存值,然后发送 
window.microApp.dispatch({age: 20})
// 第三次发送数据,新旧值合并为 {name: 'jack', age: 20},与缓存值相同,不再发送
window.microApp.dispatch({age: 20})

dispatch是异步执行的,多个dispatch会在下一帧合并为一次执行

window.microApp.dispatch({name: 'jack'})
window.microApp.dispatch({age: 20})// 上面的数据会在下一帧合并为对象{name: 'jack', age: 20}一次性发送给主应用

解决方法

那么,有没有什么办法,不缓存参数,做到每次场景触发,子应用给父应用传值,父应用都能及时监听到并触发对应操作呢

有,那就是 forceDispatch:强制发送

forceDispatch方法拥有和dispatch一样的参数和行为,唯一不同的是forceDispatch会强制发送数据,无论数据是否变化。

示例:

// 强制发送数据,无论缓存中是否已经存在 name: 'jack' 的值
window.microApp.forceDispatch({name: 'jack'}, () => {console.log('数据已经发送完成')
})

最终代码

// 子应用
...// 重新登录window.microApp.forceDispatch({type: 'callLogOut'})
...// 父应用
...mounted() {// 父应用中监听子应用触发的自定义事件microApp.addDataListener('app-deploy', this.subListener)},beforeDestroy() {// 移除监听microApp.removeDataListener('app-deploy', this.subListener)},methods: {subListener(data) {// 登录过期,跳转首页并退出登录if (data?.type === 'callLogOut') {this.$store.dispatch('LogOut').then(() => {location.href = '/index'})}},...}
...

这篇关于微前端micro-app 子应用 调用父应用方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/938522

相关文章

Python将博客内容html导出为Markdown格式

《Python将博客内容html导出为Markdown格式》Python将博客内容html导出为Markdown格式,通过博客url地址抓取文章,分析并提取出文章标题和内容,将内容构建成html,再转... 目录一、为什么要搞?二、准备如何搞?三、说搞咱就搞!抓取文章提取内容构建html转存markdown

在React中引入Tailwind CSS的完整指南

《在React中引入TailwindCSS的完整指南》在现代前端开发中,使用UI库可以显著提高开发效率,TailwindCSS是一个功能类优先的CSS框架,本文将详细介绍如何在Reac... 目录前言一、Tailwind css 简介二、创建 React 项目使用 Create React App 创建项目

vue使用docxtemplater导出word

《vue使用docxtemplater导出word》docxtemplater是一种邮件合并工具,以编程方式使用并处理条件、循环,并且可以扩展以插入任何内容,下面我们来看看如何使用docxtempl... 目录docxtemplatervue使用docxtemplater导出word安装常用语法 封装导出方

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

Java中的String.valueOf()和toString()方法区别小结

《Java中的String.valueOf()和toString()方法区别小结》字符串操作是开发者日常编程任务中不可或缺的一部分,转换为字符串是一种常见需求,其中最常见的就是String.value... 目录String.valueOf()方法方法定义方法实现使用示例使用场景toString()方法方法

Java中List的contains()方法的使用小结

《Java中List的contains()方法的使用小结》List的contains()方法用于检查列表中是否包含指定的元素,借助equals()方法进行判断,下面就来介绍Java中List的c... 目录详细展开1. 方法签名2. 工作原理3. 使用示例4. 注意事项总结结论:List 的 contain

macOS无效Launchpad图标轻松删除的4 种实用方法

《macOS无效Launchpad图标轻松删除的4种实用方法》mac中不在appstore上下载的应用经常在删除后它的图标还残留在launchpad中,并且长按图标也不会出现删除符号,下面解决这个问... 在 MACOS 上,Launchpad(也就是「启动台」)是一个便捷的 App 启动工具。但有时候,应

SpringBoot日志配置SLF4J和Logback的方法实现

《SpringBoot日志配置SLF4J和Logback的方法实现》日志记录是不可或缺的一部分,本文主要介绍了SpringBoot日志配置SLF4J和Logback的方法实现,文中通过示例代码介绍的非... 目录一、前言二、案例一:初识日志三、案例二:使用Lombok输出日志四、案例三:配置Logback一

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2