useMountedState
检查组件的挂载状态
useMountedState 返回一个函数(不是值),你可以随时调用它来检查组件是否仍然挂载。这在异步操作中特别有用,你需要防止在未挂载的组件上设置状态。该函数在重新渲染之间是稳定的,始终反映当前的挂载状态。
使用场景
- 在异步操作(
fetch、setTimeout)中保护setState调用,防止”在未挂载组件上更新状态”的警告 - 仅在组件仍在 DOM 中时有条件地执行清理或后续逻辑
- 实现应在组件卸载时停止的安全轮询或订阅模式
注意事项
- 函数返回:与返回布尔值的
useFirstMountState不同,此 hook 返回一个函数,该函数返回布尔值。调用它(isMounted())获取当前状态。 - SSR 安全:函数在服务端渲染期间返回
false,在组件在客户端挂载后变为true。 - 参见
useFirstMountState了解仅检测初始挂载而非持续挂载状态。
Usage
Live Editor
function Demo() { const isMounted = useMountedState(); const [, update] = useState(0); useEffect(() => { update(1); }, []); return <div>此组件 {isMounted() ? "已挂载" : "未挂载"}</div>; };
Result
API
useMountedState
Returns
() => boolean: 组件的挂载状态