浅谈微前端【qiankun】的应用
一、为什么要使用微前端
微前端的核心理念是将一个大型的单体前端应用拆分成多个独立的小型应用,以便各个应用能够独立开发、部署和更新。这带来了以下几个好处:
- 独立开发与部署:各个团队可以独立开发自己的子应用,快速上线新功能,而不需要等待整个应用的部署。
- 技术栈自由:子应用可以选择适合自身的技术栈,降低技术演进的成本。例如,主应用使用 Vue,但子应用可以使用 React。
- 渐进式升级:在应用重构或版本迭代时,可以逐步替换掉旧的功能,而不影响整个系统的稳定性。
- 维护性与扩展性:通过模块化管理,可以更好地维护代码,同时容易扩展新功能。
二、微前端案例场景
假设你有一个主应用 main,以及两个子应用 user 和 order。每个应用的具体职责如下:
- main:负责整体框架和导航,控制加载 user 和 order,作为门户页面。
- user:一个用于用户管理的模块,提供用户列表、用户详情和用户权限设置等功能。
- order:一个用于订单管理的模块,处理订单查询、订单详情和订单更新等功能。
具体实现需求
主应用(main)跳转到 user 或 order:
在主应用的导航栏中有两个按钮,点击分别加载 user 和 order。
例如,点击“用户管理”跳转到 http://main-app-url/user,点击“订单管理”跳转到 http://main-app-url/order。
子应用 user 跳转到 order:
user 中有一个“查看用户订单”的按钮,点击后跳转到 order,并传递用户 ID 信息,方便 order 直接加载该用户的订单。
例如,点击按钮后跳转到 http://main-app-url/order/orders?userId=123。
主应用与子应用的通信:
主应用 main 负责通知子应用加载状态,比如加载进度条。
主应用可以通过 props 传递全局信息(例如:用户身份、权限信息)给 user 和 order。
子应用 user 和 order 之间的通信:
user 和 order 都需要访问一些共享状态(例如当前登录用户信息),或者 user 中的操作需要通知 order 做一些更新。
通过主应用提供的事件总线,或者使用 qiankun 提供的全局状态管理器来实现。
三、代码示例
- 主应用 main 的配置
主应用 main 注册子应用:
import { registerMicroApps, start } from 'qiankun';registerMicroApps([{name: 'user',entry: '//localhost:8001',container: '#sub-container',activeRule: '/user',props: { sharedState: { user: 'Admin' } }, // 传递全局信息},{name: 'order',entry: '//localhost:8002',container: '#sub-container',activeRule: '/order',}
]);start();
- 主应用导航与容器:
#app.vue
<template><div><nav><button @click="goToUser">用户管理</button><button @click="goToOrder">订单管理</button></nav><div id="sub-container"></div></div>
</template><script>
export default {methods: {goToUser() {this.$router.push('/user');},goToOrder() {this.$router.push('/order');}}
}
</script>
- 子应用 user 和 order 的通信
user 内部跳转到 order:
function goToApp2WithUserId(userId) {window.location.href = `http://main-app-url/order/orders?userId=${userId}`;
}
user 接收 order 传递的信息:
const queryParams = new URLSearchParams(window.location.search);
const userId = queryParams.get('userId');
// 根据 userId 加载用户的订单
- 主应用与子应用通信
主应用提供的事件总线:
import { initGlobalState } from 'qiankun';const actions = initGlobalState({ user: {} });
actions.onGlobalStateChange((state, prev) => {// state:变更后的状态; prev:变更前的状态console.log(state, prev);
});
子应用 user 与全局状态通信:
props.onGlobalStateChange((state) => {console.log('user detected global state change:', state);
});
props.setGlobalState({ user: { name: 'John' } });
四、方案总结
通过微前端架构,main、user 和 order 可以独立开发、独立部署,减少了各个模块之间的耦合性,同时方便团队协作开发。这种架构模式可以用于大型企业级应用的不同模块中,例如 ERP 系统、在线商城系统等,通过微前端技术,能够极大地提高开发效率和应用的扩展性。
相关文章:
浅谈微前端【qiankun】的应用
一、为什么要使用微前端 微前端的核心理念是将一个大型的单体前端应用拆分成多个独立的小型应用,以便各个应用能够独立开发、部署和更新。这带来了以下几个好处: 独立开发与部署:各个团队可以独立开发自己的子应用,快速上线新功能…...
【JavaEE】——四次挥手,TCP状态转换,滑动窗口,流量控制
阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 一:断开连接的本质 二:四次挥手 1:FIN 2:过程梳理 …...
D42【python 接口自动化学习】- python基础之函数
day42 高阶函数 学习日期:20241019 学习目标:函数﹣- 55 高阶函数:函数对象与函数调用的用法区别 学习笔记: 函数对象和函数调用 # 函数对象和函数调用 def foo():print(foo display)# 函数对象 a foo print(a) # &…...
GitLab 老旧版本如何升级?
极狐GitLab 正式对外推出 GitLab 专业升级服务 https://dl.gitlab.cn/cm33bsfv! 专业的技术人员为您的 GitLab 老旧版本实例进行专业升级!服务详情可以在官网查看详细解读! 那些因为老旧版本而被攻击的例子 话不多说,直接上图&a…...
现今 CSS3 最强二维布局系统 Grid 网格布局
深入学习 CSS3 目前最强大的布局系统 Grid 网格布局 Grid 网格布局的基本认识 Grid 网格布局: Grid 布局是一个基于网格的二位布局系统,是目前 CSS 最强的布局系统,它可以同时对列和行进行处理(它将网页划分成一个个网格,可以任…...
【图解版】力扣第146题:LRU缓存
力扣第146题:LRU缓存 一、LRU算法1. 基本概念2. LRU 和 LFU 的区别:3. 为什么 LRU 不需要记录使用频率? 二、Golang代码实现三、代码图解1. LRUCache、DLinkedNode两个结构体2. 初始化结构体对象3. addToHead函数4. removeNode函数5. moveToH…...
数据库知识点整理
DDL DDL-数据库操作 show databases ------------ 查看所有数据库 select database(); ----------查看当前数据库 create database 数据库名;---- 创建数据库 use 数据库名; --------------使用数据库 drop database 数据库名;--…...
【JVM】内存模型
文章目录 内存模型的基本概念案例 程序计数器栈Java虚拟机栈局部变量表栈帧中局部变量表的实际状态栈帧中存放的数据有哪些 操作数栈帧数据 本地方法栈 堆堆空间是如何进行管理的? 方法区静态变量存储 直接内存直接内存的作用 内存模型的基本概念 在前面的学习中,我们知道了字…...
代码随想录:二叉树的四种遍历
144. 二叉树的前序遍历 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullpt…...
【Linux】从多线程同步到生产者消费者模型:多线程编程实践
目录 1.线程的同步 1.1.为什么需要线程的同步? 2.2.条件变量的接口函数 2.生产消费模型 2.1 什么是生产消费模型 2.2.生产者消费者模型优点 2.3.为何要使用生产者消费者模型 3.基于BlockingQueue的生产者消费者模型 3.1为什么要将if判断变成whileÿ…...
如何在word里面给文字加拼音?
如何在word里面给文字加拼音?在现代社会,阅读已经成为了我们日常生活中不可或缺的一部分。尤其是在学习汉语的过程中,拼音的帮助显得尤为重要。为了帮助大家更好地理解和掌握汉字的发音,许多教师和学生都希望能够在Word文档中为文…...
Detr论文精读
摘要: 作者提到,该方法将物体检测看做直接的集合预测,在传统的目标检测算法中,会先生成候选区域,然后对每个候选区域进行单独的预测(包括物体的分类和预测框的回归),集合预测就是直…...
找寻孤独伤感视频素材的热门资源网站推荐
在抖音上,伤感视频总是能够引起观众的共鸣,很多朋友都在寻找可以下载伤感视频素材的地方。作为一名资深的视频剪辑师,今天我来分享几个提供高清无水印伤感素材的网站,如果你也在苦苦寻找这些素材,不妨看看以下推荐&…...
大模型~合集13
我自己的原文哦~ https://blog.51cto.com/whaosoft/12302606 #TextRCNN、TextCNN、RNN 小小搬运工周末也要学习一下~~虽然和世界没关 但还是地铁上看书吧, 大老勿怪 今天来说一下 文本分类必备经典模型 模型 SOTA!模型资源站收录情况 模型来源论文 RAE ht…...
【Next.js 项目实战系列】04-修改 Issue
原文链接 CSDN 的排版/样式可能有问题,去我的博客查看原文系列吧,觉得有用的话,给我的库点个star,关注一下吧 上一篇【Next.js 项目实战系列】03-查看 Issue 修改 Issue 添加修改 Button 本节代码链接 安装 Radix UI 的 Ra…...
【Linux】并行与并发(含时间片)
简单来说 并发:多个进程轮流使用同一个CPU,在逻辑层面上,一段时间内推进完成了多个进程 并行:机器中有多个CPU可以使用,在物理层面上,做到同一时间会有多个进程同时在运行 举个例子:一群人需要…...
【Flutter】页面布局:弹性布局(Flex)
在 Flutter 开发中,布局是非常重要的部分。布局系统允许开发者控制和管理界面上的组件如何排列和展示。弹性布局(Flex)是其中一个非常强大且常用的布局组件,它能够在水平方向或垂直方向上灵活调整子组件的空间分配比例。Row 和 Co…...
深入解析 Go 语言接口:多接口实现与接口组合的实际应用
文章目录 一、引言二、一个类型实现多个接口1. 定义多个接口2. 类型实现多个接口3. 使用多个接口 三、接口的组合1. 接口嵌套2. 实现复合接口 四、实际开发中的应用场景1. 多态与模块化设计2. 松耦合系统设计3. 测试与依赖注入4. 事件驱动架构中的应用 五、小结 一、引言 在 G…...
Eclipse——Java开发详解
Eclipse 1、配置JDK2、设置编译版本2.1、全局编译版本2.2、项目编译版本2.3、Web项目编译版本 3、设置工作目录4、创建Java项目5、配置Tomcat6、创建Web项目7、配置Maven8、创建Maven项目8.1、普通Maven项目8.2、Maven Web项目 9、创建SpringBoot项目10、设置字体11、设置代码提…...
练手小项目推荐
以下是一些练手项目推荐,我可以给你一些适合学生毕业设计的小项目建议,既可以锻炼技能,也能完成学术要求。以下是一些可行的毕业设计项目建议: 校园导航APP 功能:为校园内的新生和访客提供导航,标记教室、…...
LinkFinder收集接口
LinkFinder可以自动化收集站点的api接口先用linkfinder爬去该js文件中所有的接口,再用正则表达式进行数据清洗,得到我们想要的api接口python3 linkfinder.py -i "https://example.com/static/js/example.js" -o cli > api.txt接着我们需要去…...
5分钟搞定:用BLAST快速检测fastq测序数据污染(附完整物种比例分析脚本)
5分钟快速检测fastq测序数据污染的实战指南 在生物信息学分析中,测序数据质量直接影响后续分析结果的可靠性。fastq格式作为二代测序的通用数据载体,可能因实验操作、样本处理或测序仪交叉污染等因素引入非目标物种序列。传统污染检测方法往往需要复杂的…...
从理论到实践:深度解析神经协同过滤(NCF)模型架构与代码复现
1. 神经协同过滤(NCF)的前世今生 推荐系统就像一位贴心的私人助理,它通过分析你的历史行为,预测你可能喜欢的商品或内容。传统的协同过滤方法,比如矩阵分解(MF),就像是给用户和物品打上简单的标签,然后计算它们之间的匹…...
从硬件视角看RISC-V FENCE:流水线、Cache与指令保序的底层实现
从硬件视角看RISC-V FENCE:流水线、Cache与指令保序的底层实现 在处理器设计中,内存访问的顺序性是一个看似简单却充满挑战的问题。想象一下,当你在厨房同时操作多个灶台时,虽然每个锅里的食材都在按计划烹饪,但火候的…...
TOPMAX嵌入式Top-N最大值追踪库详解
1. TOPMAX库概述:嵌入式系统中的Top-N最大值追踪引擎TOPMAX是一个专为资源受限嵌入式平台设计的轻量级Arduino库,其核心功能是实时、高效地维护一个动态数据流中的前N个最大值。该库并非简单的排序容器,而是一种经过工程优化的“滑动窗口最大…...
机器学习实践指南【1.0】
第1章 机器学习引言本章将介绍机器学习及其涵盖的多个话题。你将了解以下内容:什么是机器学习分类方法概述聚类方法概述模型的选择和正则化概述非线性方法概述监督学习概述无监督学习概述增强学习概述结构化预测概述神经网络概述深度学习概述1.1 什么是机器学习人类…...
极验滑动验证码自动化实战:背景提取、缺口定位与Playwright滑动模拟
滑动验证码自动化实战:背景提取、缺口定位与Playwright滑动模拟 一、前言 在爬虫自动化、Web端自动化测试、业务流程自动化等场景中,人机验证是保障系统安全的重要防线,也是自动化流程中最常见的“拦路虎”。极验(Geetest&#…...
深圳 SEO 关键词推广的常见方法有哪些_深圳 SEO 关键词推广与竞价排名有何不同
深圳 SEO 关键词推广的常见方法有哪些 在数字化营销的时代,深圳 SEO 关键词推广已经成为企业提升网站曝光率和吸引潜在客户的重要手段。究竟有哪些常见的深圳 SEO 关键词推广方法呢?本文将详细探讨这些方法,帮助你更好地理解和实践深圳 SEO …...
单片机AD采样十大滤波算法详解与应用
1. 单片机AD采样滤波算法概述在嵌入式系统开发中,ADC采样是获取模拟信号的关键环节。然而实际应用中,采样值常会受到各种干扰影响,导致数据波动甚至错误。作为一名有着十年嵌入式开发经验的工程师,我总结了十种最实用的AD采样滤波…...
OpenClaw学术写作助手:Kimi-VL-A3B-Thinking自动生成论文图表说明
OpenClaw学术写作助手:Kimi-VL-A3B-Thinking自动生成论文图表说明 1. 为什么需要自动化论文图表说明 写论文最痛苦的时刻之一,就是整理完数据图表后,还要绞尽脑汁写出专业又准确的说明文字。去年我完成硕士论文时,光是图表说明就…...
