qiankun子应用卸载后页面数据未清除,如何解决?
我在React子应用里用useRef存了一个图表实例数据,但切换到主应用后发现数据还在内存里。按文档加了unmount钩子尝试清除,但控制台报错”Cannot read properties of undefined”。
这是我的子应用入口代码:
import { createRoot } from 'react-dom/client';
let chartInstance = null;
export async function bootstrap() {
console.log('bootstrap');
}
export async function mount({ container }) {
const root = createRoot(container);
root.render(<App />);
chartInstance = { data: 'test' };
}
export async function unmount() {
chartInstance = null; // 这里报错
console.log('unmount');
}
尝试把清除逻辑移到React组件的useEffect返回函数里,但发现unmount钩子执行时组件已经销毁了。请问这种全局状态应该怎么正确清理?
我建议你这样改:在你的 App 组件里用 useEffect 管理 chartInstance 的创建和销毁,React 的 useEffect 返回的清理函数会在组件卸载时自动执行,这比手动调用更可靠。
这样一来,React 的机制会帮你管理好 chartInstance 的生命周期,不用再担心 qiankun 和 React 生命周期不一致的问题。代码也更优雅,逻辑都封装在组件内部了,外部只需要关心容器的挂载和卸载。
顺带吐槽一句,qiankun 的文档对这种细节讲得真不够清楚,踩过一次坑之后才明白,还是让 React 自己干活最省心。
修改后的代码:
就这样。