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

qainkun 子应用更新,但是访问主应用时显示的还是旧的内容

前言:

使用qiankun时,子应用只改了一个页面里很细微的东西。比如:只改了一个文字等等。访问主应用时却还是旧的页面。清除浏览器缓存才刷新过来。即使我子应用打包时文件都有了 动态的hash生成也会出现这种问题。
qiankun官方也给了解决方案:

qiankun 微应用文件更新之后,访问的还是旧版文件

我的解决方案

本质上是解决浏览器缓存问题:
h5的可以看看:React、vue、h5端项目避免缓存
如果qiankun给的方案依然不行,就可以试试:

子应用项目里新建一个 version.json 写上版本号(需要注意的是需要打完包部署后可以访问到的地方):

{
  "sub-pdProduct": "1.0.10"
}

然后主应用 注册子应用时 entry 后面拼上版本号:
先 请求对应地址的json文件

 fetch(xxx/version.json, {
    method: 'GET', mode: 'cors', cache: 'no-cache'
  })
    .then((response) => response.json())
    .then((res) => {
      if (localStorage.getItem("subPbVersion") !== res["sub-multi-tabs-admin"]) {
        localStorage.setItem("subPbVersion", res["sub-multi-tabs-admin"]);
      }
    })
    .catch(function (err) {
      localStorage.setItem("subPbVersion", timeStr.toString());
    });

然后:

 {
    name: 'sub-pdProduct',
    entry: xxx + "?version=" + localStorage.getItem("subPdVersion"),
    container: '#qiankun-imp-wrap',
    activeRule: '/#/sub-pdProduct',
  },

这样做会遇到一些问题,比如 跨域。如果实在不行,也可以把所有子应用的版本号维护放到一个接口里。子应用更新了也要同步更新版本号。

我只是提供这么一个思路,具体实施需要根据自己的需求来定(目前我就是用 各个子项目维护自己的版本号,缺点是 子应用有几个就需要请求几个json,后面考虑合并到一起)。

如果不想这么麻烦,还有个方法就是 直接加 时间戳:
显而易见这个的缺点就是 每次访问时都会重新请求资源(其实我觉得这个也不会造成太大的资源浪费)

const timeStr = new Date().getHours();
{
    name: 'sub-xxx',
    entry: xxx "?time=" + timeStr,
    container: '#qiankun-imp-wrap',
    activeRule: '/#/sub-xxx',
  },

http://www.kler.cn/news/339578.html

相关文章:

  • 华为OD机试 - 删除重复数字后的最大数字 - 贪心算法(Python/JS/C/C++ 2024 E卷 200分)
  • TypeScript 中枚举类型的理解?应用场景有哪些
  • ML 系列:机器学习和深度学习的深层次总结(14) — 逻辑回归(第 3 部分 — 实施)
  • Win10 安装 Redis 数据库
  • 八大排序--04希尔排序(缩小增量排序)
  • 关于Amazon Linux 2023的版本及包管理器
  • HexHub | 一款强大的SSH/SFTP、数据库、Docker 跨平台桌面客户端
  • 自定义持久层框架------从零到一手写一个mybatis
  • 计算机毕业设计 二手图书交易系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • appium中的uiautomatorviewer显示的界面为横屏解决方法
  • 行业预测 60TB 硬盘将于 2028 年到来
  • Spring源码二IOC容器源码
  • 网络知识点之—EVPN
  • 尚硅谷rabbitmq 2024 消息可靠性答疑二 第22节
  • 【智能算法应用】人工水母搜索算法求解二维路径规划问题
  • 大模型笔记05--coze经典案例分析
  • python爬虫 - 深入requests模块
  • redis高级(面试题一)
  • Ruby XML, XSLT 和 XPath 教程
  • HTML CSS 基础