除了表单处理,自定义 Hooks 还适用于许多其他常见场景,主要用于封装可复用的状态逻辑。以下是一些典型场景和对应的自定义 Hook 示例:

1. 窗口事件监听(如尺寸、滚动)

监听窗口尺寸变化、滚动位置等,在响应式布局中非常实用。

使用场景:响应式布局(如移动端/桌面端视图切换)、画布尺寸适配等。

2. 定时器管理

封装 setTimeoutsetInterval,避免组件卸载后仍执行定时器导致的内存泄漏。

使用场景:倒计时、轮播组件、实时数据刷新等。

3. 权限控制

封装用户权限判断逻辑,在不同组件中统一使用。

使用场景:按钮/菜单的权限控制、页面访问限制等。

4. 数据缓存与失效

缓存API请求结果,避免重复请求,可设置过期时间。

使用场景:不频繁变化的数据(如分类列表、字典数据)的请求优化。

5. 状态持久化(扩展localStorage)

除了基础的 useLocalStorage,还可封装更复杂的持久化逻辑(如带加密、过期时间)。

使用场景:临时令牌存储、用户偏好设置(带有效期)等。

6. 媒体查询(响应式判断)

通过 Hook 封装 CSS 媒体查询逻辑,在 JS 中响应样式变化。

使用场景:根据屏幕宽度切换组件逻辑(如移动端隐藏复杂组件)。

总结

自定义 Hooks 的核心价值是逻辑复用,只要某段状态逻辑需要在多个组件中使用,就可以考虑封装为自定义 Hook。常见场景还包括:

  • 表单验证(useFormValidation
  • 拖拽逻辑(useDragAndDrop
  • 键盘快捷键(useKeyPress
  • 主题切换(useTheme

封装时需注意遵循 Hooks 规则(命名以 use 开头、只能在组件或其他 Hooks 中调用),并保持单一职责,让每个 Hook 专注解决一个问题。