当前位置: 首页 > news >正文

微前端中的路由加载流程

1. 初始化基座应用

基座应用:基座应用是微前端架构中的主应用,负责管理和协调各个子应用的加载和卸载。
初始化:基座应用在启动时会初始化路由配置,注册各个子应用的路由。

2. 注册子应用

子应用需要向基座应用注册自己的路由和入口点。这通常通过一个配置文件或注册函数来实现。

// 基座应用中的注册函数
registerMicroApp('app1', {entry: '//localhost:3001',container: '#subapp-container',activeRule: '/app1'
});registerMicroApp('app2', {entry: '//localhost:3002',container: '#subapp-container',activeRule: '/app2'
});

3. 路由匹配

当用户访问某个 URL 时,基座应用会根据路由配置匹配相应的子应用。

// 基座应用中的路由匹配
const router = new Router();
router.addRoute('/app1', () => loadApp('app1'));
router.addRoute('/app2', () => loadApp('app2'));
router.start();

4. 加载子应用

基座应用根据匹配的路由动态加载对应的子应用。

function loadApp(name) {return import(`@/apps/${name}`).then((app) => {app.bootstrap(); // 子应用的启动方法});
}

5. 渲染子应用

子应用加载完成后,基座应用会将子应用渲染到指定的容器中。

// 子应用的启动方法
export function bootstrap() {render(<App />, document.getElementById('subapp-container'));
}

6. 路由切换

当用户导航到不同的路由时,基座应用会卸载当前子应用,并加载新的子应用。

function switchRoute(path) {const currentApp = getCurrentApp();if (currentApp) {currentApp.unmount(); // 卸载当前子应用}const nextApp = getAppByPath(path);if (nextApp) {loadApp(nextApp.name); // 加载新的子应用}
}

7. 生命周期管理

子应用通常会提供一些生命周期方法,如 bootstrap、mount、unmount 等,用于管理子应用的加载、渲染和卸载过程。

// 子应用的生命周期方法
export function bootstrap() {console.log('app1 bootstrap');
}export function mount(props) {render(<App />, props.container);
}export function unmount() {unmountComponentAtNode(document.getElementById('subapp-container'));
}

8. 状态管理

在微前端架构中,子应用之间可能需要共享状态。基座应用可以提供一个全局的状态管理机制,如 Redux、MobX 等。

// 基座应用中的状态管理
const store = createStore(reducer);// 子应用中获取全局状态
function getGlobalState() {return store.getState();
}

9. 通信机制

子应用之间或子应用与基座应用之间可能需要进行通信。可以通过事件总线、全局对象等方式实现。

// 基座应用中的事件总线
const eventBus = new EventEmitter();// 子应用中发送事件
eventBus.emit('event-name', data);// 子应用中监听事件
eventBus.on('event-name', (data) => {console.log(data);
});

相关文章:

微前端中的路由加载流程

1. 初始化基座应用 基座应用&#xff1a;基座应用是微前端架构中的主应用&#xff0c;负责管理和协调各个子应用的加载和卸载。 初始化&#xff1a;基座应用在启动时会初始化路由配置&#xff0c;注册各个子应用的路由。 2. 注册子应用 子应用需要向基座应用注册自己的路由和…...

Axure大屏可视化模板:跨领域数据分析平台原型案例

随着信息技术的飞速发展&#xff0c;数据可视化已成为各行各业提升管理效率、优化决策过程的重要手段。Axure作为一款强大的原型设计工具&#xff0c;其大屏可视化模板在农业、园区、城市、企业数据可视化、医疗等多个领域得到了广泛应用。本文将通过几个具体案例&#xff0c;展…...

机器学习(1)——线性回归、线性分类与梯度下降

文章目录 线性回归线性分类线性可分数据线性不可分数据逻辑回归支持向量机 梯度下降批量梯度下降随机梯度下降批量随机梯度下降 线性回归 概述&#xff1a; 在一元线性回归中&#xff0c;我们假设目标变量y与特征变量x存在线性关系&#xff0c;模型表达式为&#xff1a; y …...

完整的端到端的中文聊天机器人

这段代码是一个完整的端到端的中文聊天机器人的实现,包括数据处理、模型训练、预测和图形用户界面(GUI),下面是对各个部分功能的详细说明: 1. 导入必要的库 import os os.environ[CUDA_LAUNCH_BLOCKING] = 1import torch import torch.nn as nn import torch.optim as o…...

【有啥问啥】Stackelberg博弈方法:概念、原理及其在AI中的应用

Stackelberg博弈方法&#xff1a;概念、原理及其在AI中的应用 1. 什么是Stackelberg博弈&#xff1f; Stackelberg博弈&#xff08;Stackelberg Competition&#xff09;是一种不对称的领导者-追随者&#xff08;Leader-Follower&#xff09;博弈模型&#xff0c;由德国经济学…...

【UI自动化】前言

系列文章目录 【UI自动化】前言 自动化不能代替手工测试&#xff0c;自动化都是以手工测试为基础&#xff0c;自动化测试实现的步骤要依赖手工&#xff1b; 文章目录 系列文章目录【UI自动化】前言 自动化测试的类型自动化解决的问题什么是UI测试测试分类一、使用UI自动化的…...

Unity对象池的高级写法 (Plus优化版)

唐老师关于对物体分类的OOD的写法确实十分好&#xff0c;代码也耦合度也低&#xff0c;但是我有个简单的写法同样能实现一样的效果&#xff0c;所以我就充分发挥了一下主观能动性 相较于基本功能&#xff0c;这一版做出了如下改动 1.限制了对象池最大数量&#xff0c;多出来的…...

vue3<script setup>中computed

在 Vue 3 中&#xff0c;<script setup> 语法糖是 Composition API 的一种简化写法&#xff0c;它允许你更简洁地编写组件逻辑。在 <script setup> 中使用 computed 与在普通 <script> 标签中使用 Composition API 的方式类似&#xff0c;但通常我们会借助 i…...

【已解决】使用JAVA语言实现递归调用-本关任务:用循环和递归算法求 n(小于 10 的正整数) 的阶乘 n!。

本关任务&#xff1a;用循环和递归算法求 n&#xff08;小于 10 的正整数&#xff09; 的阶乘 n!。 测试说明 平台会对你编写的代码进行测试&#xff0c;比对你输出的数值与实际正确数值&#xff0c;只有所有数据全部计算正确才能通过测试&#xff1a; 测试输入&#xff1a;1…...

BiRefNet 教程:基于 PyTorch 实现的双向精细化网络

BiRefNet 教程&#xff1a;基于 PyTorch 实现的双向精细化网络 BiRefNet 是一个图像分割网络&#xff0c;专注于复杂任务如背景移除、掩码生成、伪装物体检测、显著性目标检测等。该模型结合了编码器、解码器、多尺度特征提取、以及梯度监督机制&#xff0c;能够有效处理不同类…...

Oracle 数据库安装和配置指南(新)

目录 1. 什么是Oracle数据库&#xff1f; 2. 安装前的准备工作 2.1 硬件要求 2.2 软件要求 2.3 下载Oracle安装包 3. Oracle数据库的安装步骤 3.1 Windows系统安装步骤 3.2 Linux系统安装步骤 4. 配置Oracle数据库 4.1 设置环境变量&#xff08;Linux&#xff09; 4.…...

JavaScript的注释与常见输出方式

注释 源码中注释是不被引擎所解释的&#xff0c;它的作用是对代码进行解释。Javascript 提供两种注释的写法:一种是单行注释&#xff0c;用//起头;另一种是多行注释&#xff0c;放在/*和*/之间。 单行注释&#xff1a; //这是单行注释 多行注释&#xff1a; /*这是 多行 注…...

深入探索Android开发之Java核心技术学习大全

Android作为全球最流行的移动操作系统之一&#xff0c;其开发技能的需求日益增长。本文将为您介绍一套专为Android开发者设计的Java核心技术学习资料&#xff0c;包括详细的学习大纲、PDF文档、源代码以及配套视频教程&#xff0c;帮助您从Java基础到高级特性&#xff0c;再到A…...

vue3 选择字体的颜色,使用vue3-colorpicker来选择颜色

1、有的时候我们会用到颜色的选择器&#xff0c;像element-plus提供了&#xff0c;但是ant-design-vue并没有&#xff1a; 这个暂时没有看到&#xff1a; 但是Ant Design 5的版本有&#xff0c;应该不是vue的。 2、使用第三方提供的vue3-colorpicker&#xff1a;storybook/cli…...

windows C++ 并行编程-使用消息块筛选器

本文档演示了如何使用筛选器函数&#xff0c;使异步消息块能够根据消息的有效负载接受或拒绝消息。 创建消息块对象(例如 concurrency::unbounded_buffer、concurrency::call 或 concurrency::transformer)时&#xff0c;可以提供筛选器函数&#xff0c;用于确定消息块是接受还…...

【mysql技术内幕】

MySQL之技术内幕 1.MVCC模式2. 实现mvcc模式的基础点3.MySQL锁的类型4. 说下MySQL的索引有哪些吧&#xff1f;5. 谈谈分库分表6. 分表后的id咋么保证唯一性呢&#xff1f;7. 分表后非sharding key的查询咋么处理的&#xff1f; 1.MVCC模式 MVCC, 是multi-version concurrency c…...

快递物流单号识别API接口DEMO下载

单号识别API为用户提供单号识别快递公司服务&#xff0c;依托于快递鸟大数据平台&#xff0c;用户提供快递单号&#xff0c;即可实时返回可能的一个或多个快递公司&#xff0c;存在多个快递公司结果的&#xff0c;大数据平台根据可能性、单号量&#xff0c;进行智能排序。 应用…...

Jetpack——Room

概述 Room是谷歌公司推出的数据库处理框架&#xff0c;该框架同样基于SQLite&#xff0c;但它通过注解技术极大简化了数据库操作&#xff0c;减少了原来相当一部分编码工作量。在使用Room之前&#xff0c;要先修改模块的build.gradle文件&#xff0c;往dependencies节点添加下…...

Dynamic Connected Networks for Chinese Spelling Check(ACL2021)

Dynamic Connected Networks for Chinese Spelling Check(ACL2021) 一&#xff0e;概述 文中认为基于bert的非自回归语言模型依赖于输出独立性假设。不适当的独立性假设阻碍了基于bert的模型学习目标token之间的依赖关系&#xff0c;从而导致了不连贯的问题。为些&#xff0c…...

前端vue-3种生命周期,只能在各自的领域使用

上面的表格可以简化为下面的两句话&#xff1a; setup是语法糖&#xff0c;下面的两个import导入是vue3和vue2的区别&#xff0c;现在的vue3直接导入&#xff0c;比之前vue2简单 还可以是导入两个生命周期函数...

el-upload如何自定展示上传的文件

Element UI 中&#xff0c;el-upload 组件支持通过插槽&#xff08;slot&#xff09;来自定义文件列表的展示方式。这通常是通过 file-list 插槽来实现的。下面是一个使用 el-upload 组件并通过 file-list 插槽来自定义文件列表展示的完整示例代码。 在这个示例中&#xff0c;…...

研1日记15

1. 文心一言生成&#xff1a; 在PyTorch中&#xff0c;nn.AdaptiveAvgPool1d(1)是一个一维自适应平均池化层。这个层的作用是将输入的特征图&#xff08;或称为张量&#xff09;在一维上进行自适应平均池化&#xff0c;使得输出特征图的大小在指定的维度上变为1。这意味着&…...

基于Nginx搭建点播直播服务器

实现直播和点播离不开服务器⽀持&#xff0c;可以使用开源的NGINX服务器搭建直播和点播服务。 当然&#xff0c;NGINX本身是不⽀持视频的&#xff0c;需要为NGINX增加相应的RTMP模块进行支持。 1、下载nginx和rtmp模块 # nginx wget ht tp://nginx.org/download/nginx-1.18.…...

QT LineEdit显示模式

QT LineEdit显示模式 QLineEdit 显示模式:   Normal 普通模式   NoEcho 不回写&#xff0c;即输入内容是有的&#xff0c;但是显示不出来,就是不在 QLineEdit 输入框中显示&#xff0c;但是触发例如 textChanged 信号会将所输入的文字写出来   Password 显示密码   Pa…...

IT技术在数字化转型中的关键作用

IT技术在数字化转型中的关键作用 在当今数字化浪潮中&#xff0c;IT技术无疑扮演着核心角色。无论是企业的数字化转型&#xff0c;还是政府公共服务的智能化提升&#xff0c;信息技术都在推动着整个社会向更高效、更智能的方向发展。本文将探讨IT技术在数字化转型中的关键作用…...

【C++指南】C++中nullptr的深入解析

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《C指南》 期待您的关注 目录 引言 一、nullptr的引入背景 二、nullptr的特点 1.类型安全 2.明确的空指针表示 3.函数重载支…...

解决启动docker desktop报The network name cannot be found的问题

现象 deploying WSL2 distributions ensuring main distro is deployed: checking if main distro is up to date: checking main distro bootstrap version: getting main distro bootstrap version: open \wsl$\docker-desktop\etc\wsl_bootstrap_version: The network name…...

Guava: 探索 Google 的 Java 核心库

Guava 是 Google 开发的一套 Java 核心库&#xff0c;它提供了一系列新的集合类型&#xff08;例如多映射 multimap 和多集合 multiset&#xff09;、不可变集合、图形库以及用于并发、I/O、哈希、原始类型、字符串等的实用工具。Guava 在 Google 的大多数 Java 项目中得到了广…...

Qt-qmake概述

概述 qmake工具为您提供了一个面向项目的系统&#xff0c;用于管理应用程序、库和其他组件的构建过程。这种方法使您能够控制使用的源文件&#xff0c;并允许简洁地描述过程中的每个步骤&#xff0c;通常在单个文件中。qmake将每个项目文件中的信息扩展为一个Makefile&#xf…...

【protobuf】ProtoBuf的学习与使用⸺C++

W...Y的主页 &#x1f60a; 代码仓库分享&#x1f495; 前言&#xff1a;之前我们学习了Linux与windows的protobuf安装&#xff0c;知道protobuf是做序列化操作的应用&#xff0c;今天我们来学习一下protobuf。 目录 ⼀、初识ProtoBuf 步骤1&#xff1a;创建.proto文件 步…...