除了表单处理,自定义 Hooks 还适用于许多其他常见场景,主要用于封装可复用的状态逻辑。以下是一些典型场景和对应的自定义 Hook 示例:
1. 窗口事件监听(如尺寸、滚动)
监听窗口尺寸变化、滚动位置等,在响应式布局中非常实用。
使用场景:响应式布局(如移动端/桌面端视图切换)、画布尺寸适配等。
2. 定时器管理
封装 setTimeout
或 setInterval
,避免组件卸载后仍执行定时器导致的内存泄漏。
使用场景:倒计时、轮播组件、实时数据刷新等。
3. 权限控制
封装用户权限判断逻辑,在不同组件中统一使用。
使用场景:按钮/菜单的权限控制、页面访问限制等。
4. 数据缓存与失效
缓存API请求结果,避免重复请求,可设置过期时间。
使用场景:不频繁变化的数据(如分类列表、字典数据)的请求优化。
5. 状态持久化(扩展localStorage)
除了基础的 useLocalStorage
,还可封装更复杂的持久化逻辑(如带加密、过期时间)。
使用场景:临时令牌存储、用户偏好设置(带有效期)等。
6. 媒体查询(响应式判断)
通过 Hook 封装 CSS 媒体查询逻辑,在 JS 中响应样式变化。
使用场景:根据屏幕宽度切换组件逻辑(如移动端隐藏复杂组件)。
总结
自定义 Hooks 的核心价值是逻辑复用,只要某段状态逻辑需要在多个组件中使用,就可以考虑封装为自定义 Hook。常见场景还包括:
- 表单验证(
useFormValidation
) - 拖拽逻辑(
useDragAndDrop
) - 键盘快捷键(
useKeyPress
) - 主题切换(
useTheme
)
封装时需注意遵循 Hooks 规则(命名以 use
开头、只能在组件或其他 Hooks 中调用),并保持单一职责,让每个 Hook 专注解决一个问题。