Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug] 通过loadMicroApp加载的子应用,在执行了unmount之后,再一次loadMicroApp,并没有触发fetch请求拉取子应用资源 #3036

Open
WushangTi opened this issue Jan 14, 2025 · 0 comments

Comments

@WushangTi
Copy link

What happens?

在实际项目中采用qiankun的loadMicroApp来手动加载子应用,当出现以下场景:

- 场景1:在加载应用A时,网络突然中断,导致fetch请求子应用资源失败,子应用状态为 LOADING_SOURCE_CODE。
(对应的真实业务场景为:当用户需要开会时,需要切换网络环境,从网线网站状态切换为wifi网络状态,导致部分子应用加载失败,且后续连上网络后尽管程序使用了loadMicroApp来加载失败的子应用,但是没有重新fetch应用资源导致应用处于加载失败状态。)

导致子应用状态为 LOADING_SOURCE_CODE 时,通过unmount来卸载渲染失败的子应用,然后调用loadMicroApp再次加载子应用时,未触发fetch重新拉取子应用资源,且子应用的状态永远停留在了 LOADING_SOURCE_CODE 上。只能通过刷新浏览器来重新加载所有子应用来解决(因为项目中添加了页面缓存,所以用户是不接受通过刷新浏览器去重新加载所有子应用的)。

复现步骤,错误日志以及相关配置

场景1复现步骤:

  1. 通过loadMicroApp来手动加载应用A与应用B,当访问应用A时加载A,访问应用B时加载B。
  2. 第一次访问应用A,正常加载,然后打开浏览器控制台,切换到Network下,将网络切换为Offline。
  3. 然后访问应用B,应用B加载失败,切换回应用A。
  4. 然后打开浏览器控制台,切换到Network下,将网络切换为No throttling,然后切换回应用B。
  5. 尽管应用B被卸载且重新触发了loadMicroApp加载,但是未重新fetch应用资源,且应用B状态停留在了 LOADING_SOURCE_CODE。

经过研读源码,发现问题出在 import-html-entry 上,已经 fetch 过的子应用不再进行 fetch 了。
1
2
3

相关环境信息

  • qiankun 版本:2.10.16
  • 浏览器版本:Chrome 108.0.5359.125
  • 操作系统:Windows
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant