Reproduction link
Steps to reproduce
使用微前端框架加载子应用,如果子应用中引入了 antd 的Modal 组件,每次加载都会在 document 上新增一个事件绑定,导致内存持续增长。
// 这句代码是在 Modal 引入时全局作用域下执行的。
document.documentElement.addEventListener('click', getClickPosition, true)
What is expected?
在 window unload 时解除这个全局的事件绑定。
What is actually happening?
在 window unload 时没有解除这个全局的事件绑定。
| Environment | Info |
| ------------ | ------------ |
| antd | 5.14.1 |
| React | 16.14.0 |
| System | MacOS 13.2.1 (22D68) |
| Browser | Chrome 121.0.6167.184 |
9条答案
按热度按时间xxls0lw81#
根据微前端实现不同,window 的 unload 事件可能并没有被代理。你们使用的微前端技术栈是什么?
hrysbysz2#
根据微前端实现不同,window 的 unload 事件可能并没有被代理。你们使用的微前端技术栈是什么?
目前是 micro-app,没有代理unload的。不过是否能提供一个回调之类的配置,可以将解绑的函数暴露出来,我们在业务层也能处理。
sycxhyv73#
如果子应用使用的是同一版本的 antd,可以通过 external 来共享,这样就不会存在重复 addEventListener 的情况。
如果使用的是不同版本的 antd 可能会有其他复杂问题,可以考虑治理一下?
mu0hgdu04#
不过是否能提供一个回调之类的配置,可以将解绑的函数暴露出来,我们在业务层也能处理。
这是一个解决方法,不过对用户来说还是有成本,如果存在必须的场景我们偏向于在 antd 中解决这个问题。
ssgvzors5#
印象中 qiankun 中不会遇到这个问题。
6l7fqoea6#
印象中 qiankun 中不会遇到这个问题。
同 microapp 会有问题。func 组件 完全可以调整避免原来compdid的问题
0qx6xfy67#
如何调整?求指导 @ourfeel
daupos2t8#
如何调整?求指导 @ourfeel
暴力点 事件和方法挪到 useEffect 是否可行
2hh7jdfx9#
印象中 qiankun 中不会遇到这个问题。
qiankun 应该也有同样问题。 引入zone。 所有事件被zone代理掉了。