Ant Design 的 message 为什么在组件卸载后还会报错?
我在 React 组件里用 message.error() 提示错误,但有时候用户操作太快,组件已经卸载了,message 还在显示,控制台就报 Warning:Can’t perform a React state update on an unmounted component。
我试过在 useEffect 里加个 isMounted 标志判断,但 message 是静态方法,好像没法直接取消。有没有办法安全地避免这个警告?
比如这样调用的:
const handleFetch = async () => {
try {
await api.getData();
} catch (err) {
message.error('请求失败');
}
};
官方文档里其实有提到这个,推荐用 message.destroy() 手动清理。不过更好的做法是在组件卸载时取消所有 message。可以这样改:
或者更保险的做法是用 message.config 设置 maxCount 为1,这样就不会堆积太多消息:
说实话这种全局状态管理的问题在React里挺常见的,我们组现在都改用自定义hook来封装message了,这样更好控制生命周期。