微前端子应用卸载后生命周期钩子没触发导致内存泄漏怎么办?
在用qiankun搭建微前端时,发现动态加载的子应用卸载后unmount和destroy钩子没执行,导致重复挂载时出现组件残留。我按文档在子应用里写了:
// app.js
async function unmount() {
const { container } = window._qiankunContent;
container.remove();
return Promise.resolve();
}
但主应用调用removeMicroApp后控制台报错"unmount not found",内存监控显示实例还在。试过手动调用子应用的unmount方法也没反应,是不是注册流程哪里漏了?
unmount和bootstrap钩子,qiankun 是通过这些钩子来管理子应用的生命周期的。你在
app.js里写了unmount方法,但报错提示说找不到这个钩子,说明可能是子应用启动时没有把生命周期方法暴露给主应用。正确的做法是在子应用入口文件中显式导出这些方法,比如这样:注意,这里要把
unmount方法和mount方法一起导出,确保主应用能调用到它们。另外,removeMicroApp的作用是通知主应用卸载子应用,但它依赖于子应用的生命周期钩子,如果钩子没注册好,它就无法正常工作。如果你已经确认钩子没问题,但还是报错,可以检查主应用的配置,确保
loadMicroApp或registerMicroApps时传入的参数是正确的,特别是entry和container这两个字段。最后一个小建议,性能上为了更彻底地清理内存,可以在
unmount方法里手动销毁一些全局变量或事件监听器,防止残留引用导致垃圾回收失败。比如:按照这个思路排查一遍,问题应该就能解决了。如果还有问题,可以再补充细节,咱们继续讨论。