组件卸载后订阅没清理,内存泄漏怎么解决?

Dev · 卫红 阅读 4

我在 React 组件里用 useEffect 订阅了一个全局事件,但切换页面后发现回调还在执行,明显是内存泄漏了。试过在 useEffect 返回函数里 unsubscribe,但好像没生效?

下面是我的代码结构:

useEffect(() => {
  const handleUpdate = (data) => {
    console.log('收到更新:', data);
    setState(data);
  };
  eventBus.subscribe('user-update', handleUpdate);
  // 忘记返回清理函数了?
}, []);

是不是必须显式返回一个清理函数?具体该怎么写才对?

我来解答 赞 4 收藏
二维码
手机扫码查看
1 条解答
UX爱琴
UX爱琴 Lv1
必须返回清理函数才行,代码如下:
useEffect(() => {
const handleUpdate = (data) => {
console.log('收到更新:', data);
setState(data);
};
eventBus.subscribe('user-update', handleUpdate);
return () => eventBus.unsubscribe('user-update', handleUpdate);
}, []);
点赞
2026-03-21 14:01