useMount
package version >0.1.1
shadcn any version
author: cmtlyt
update time: 2026/04/01 16:07:21
一个用于在组件挂载时执行一次回调函数的 React Hook。它封装了 useEffect 的空依赖数组模式,提供了更清晰的语义和更好的可读性。
特性
- 只执行一次:确保回调函数只在组件首次挂载时执行一次
- 类型安全:完整的 TypeScript 类型支持
- 错误处理:内置错误处理机制,确保回调执行的安全性
- 引用稳定:使用
useRef保存回调引用,避免不必要的闭包问题
安装
npm
shadcn
用法
基础用法
数据初始化
事件监听注册
API 请求
第三方库初始化
API
useMount
参数
返回值
void - 不返回任何值
实际使用场景
1. 数据预加载
在组件挂载时预加载必要的数据,避免用户等待:
2. 权限检查
在组件挂载时检查用户权限:
3. 日志记录
记录组件挂载事件用于分析和调试:
4. 定时器设置
设置一次性定时器:
注意事项
⚠️ 不要用于状态更新
不要在 useMount 中直接更新依赖其他状态的状态,这可能导致闭包陷阱:
⚠️ 异步操作需要错误处理
在 useMount 中执行异步操作时,务必添加错误处理:
⚠️ 清理副作用
如果 useMount 中的回调创建了副作用(如定时器、事件监听器),记得在 useEffect 的清理函数中清理:
⚠️ 性能考虑
useMount 只在组件首次挂载时执行,如果需要在特定依赖变化时执行,请使用 useEffect:
对比
useMount vs useEffect
何时使用 useMount
- ✅ 只需要执行一次的初始化操作
- ✅ 不需要清理的副作用
- ✅ 希望代码语义更清晰
何时使用 useEffect
- ✅ 需要响应依赖变化
- ✅ 需要清理副作用
- ✅ 需要更灵活的控制
常见问题
Q: useMount 和直接写 useEffect(() => , []) 有什么区别?
A: 功能上基本相同,但 useMount 提供了更好的语义和可读性。它明确表示"在挂载时执行",而 useEffect(() => {}, []) 需要理解空依赖数组的含义。
Q: 可以在 useMount 中返回清理函数吗?
A: 不可以。useMount 不支持清理函数。如果需要清理副作用,请使用 useEffect。
Q: useMount 中的回调函数可以使用 async/await 吗?
A: 可以,但建议添加错误处理机制,确保异步操作的错误能够被捕获和处理。
Q: useMount 会在组件重新渲染时执行吗?
A: 不会。useMount 只在组件首次挂载时执行一次,之后的重新渲染不会触发它。