关于 mantine-hooks
面向使用独立 `@mantine/hooks` React Hooks 包的编码 Agent,涵盖 Hooks 选择、SSR 注意事项、实现模式及 9.x 迁移指导。
主要功能
- 01Hooks 选择与用法指导
- 02状态、存储和事件 Hooks 模式
- 03SSR 与水合注意事项
- 04React 19.2+ 版本指导
- 058 到 9 的迁移说明
- 06验证与测试建议
适用场景
- 01为 React 功能选择 Hooks
- 02处理 SSR 中的存储或媒体 Hooks
- 03将 Hooks 用法从 8 迁移
- 04检查 Hooks 导入和类型
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ dobroslavradosavljevic/ skills --skill mantine-hooks安装后在 Claude Code 中输入/mantine-hooks确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
agents/openai.yamlreferences/advanced-interaction.mdcatalog.mdobservers-timing.mdsetup-core.mdsource-map.mdstate-storage.mdui-events.md详细介绍
Mantine Hooks
仅将此技能用于 @mantine/hooks ——独立的 React hooks 包。除非用户在此技能之外明确要求,否则不要引入 @mantine/core、@mantine/form 或其他 @mantine/* 包。
优先参考当前文档,而非依赖记忆。说明内容以 @mantine/[email protected] 为准(npm latest 快照:9.6.3,peer react@^19.2.0;9.5.1–9.6.3 未添加新的 hook 导出)。
工作流
- 修改代码前检查项目:
- 已安装的
@mantine/hooks版本和 React peer 版本。 - 应用是仅 SPA,还是 SSR/已水合(会影响
getInitialValueInEffect和媒体/存储 hooks)。 - 涉及哪些 hook 系列:状态、存储、事件、观察器、计时或交互构建器。
- 已安装的
- 当行为或迁移相关时,从 source-map.md 更新版本和文档 URL。
- 安装、导入、工具函数、SSR 默认值、类型和包边界请参考 setup-core.md。
- 布尔值/列表/对象/Map/Set 状态、非受控值、存储、队列、分页和历史记录请参考 state-storage.md。
- 点击外部、快捷键、焦点、悬停/鼠标、剪贴板、全屏、长按以及 window/document 事件请参考 ui-events.md。
- 媒体查询、观察器、防抖/节流、计时器、空闲/网络/操作系统以及 fetch 请参考 observers-timing.md。
- 移动/拖拽/径向、折叠、遮罩、循环索引、分隔器、浮动窗口、选择和滚动辅助工具请参考 advanced-interaction.md。
- 完整的 hook 索引及文档链接请参考 catalog.md。
实现判断
- 仅从
@mantine/hooks导入。 优先使用命名导入:import { useDisclosure, clamp } from '@mantine/hooks'。 - 该包独立运行:只要求 React peer 依赖。可安全用于任何 React Web 应用,无需其他 Mantine 包。状态管理钩子(例如
usePagination、useQueue)也适用于 React Native;DOM/window 钩子则不适用。 - 9.x 要求 React 19.2+。多个钩子使用 React 19 的
useEffectEvent(usePageLeave、useWindowEvent、useHotkeys、useClickOutside、useCollapse)——不要仅为保持监听器稳定而强行套用useCallback。 - 优先使用导出的选项/返回值类型(
UseDisclosureOptions,或useDisclosure.Options这类命名空间形式),而不是自行定义类型结构。 - 对 SSR 敏感的钩子(
useMediaQuery、useColorScheme、useReducedMotion、useLocalStorage/useSessionStorage、视口尺寸):默认情况下,会在挂载后通过getInitialValueInEffect: true计算。为服务端渲染传入明确的initialValue/defaultValue;只有仅限 CSR 的应用需要在首次绘制时获取实际值时,才设置getInitialValueInEffect: false。 - 将返回 ref 的钩子与
useMergedRef/mergeRefs组合使用(例如useClickOutside+useFocusTrap+ 本地 ref)。 - 防抖三种用法:
useDebouncedValue— 受控源值保持即时更新;为副作用/搜索提供防抖副本。useDebouncedState— setter 本身经过防抖(非受控风格)。useDebouncedCallback— 对函数进行防抖(flush/cancel/isPending)。
- 节流也有相同的划分:
useThrottledValue/useThrottledState/useThrottledCallback。 - **全屏:**使用
useFullscreenDocument或useFullscreenElement——9.x 中没有单独导出的useFullscreen。 - 鼠标:
useMouse基于元素 ref;useMousePosition跟踪文档级别的位置。 - 回调 ref 钩子(
useResizeObserver、useMouse、useMutationObserver、许多交互钩子)可处理动态节点替换——优先使用返回的 ref 回调,不要沿用过时的useRef赋值模式。 useFetch是轻量级的 fetch 辅助工具,不是服务端状态库——适合少量一次性加载;不要把它当作 Query/SWR。- 示例和生成的代码应避免依赖其他 Mantine 包,除非所在项目已依赖这些包,且用户要求使用相关功能。
迁移注意事项(8 → 9)
- Peer React 19.2+。
useFullscreen→useFullscreenDocument/useFullscreenElement。useMouse拆分为useMouse+useMousePosition。useResizeObserver/useMutationObserver→ 回调 ref API;外部节点使用useMutationObserverTarget。useDisclosure新增handlers.set(boolean)。- 类型重命名:
UseScrollSpyReturnType→UseScrollSpyReturnValue、StateHistory→UseStateHistoryValue、OS→UseOSReturnValue。 useMediaQuery移除了对非常旧版本 Safari 的matchMedia回退支持。
验证
优先使用仓库中已有的检查。对于有实际意义的 @mantine/hooks 工作,纳入相关子集:
- 使用已安装的
@mantine/hooks类型声明以及导出的选项/返回值类型进行类型检查。 - 确认导入仅来自
@mantine/hooks(仅处理钩子的任务不得意外引入@mantine/core)。 - SSR/水合:断言服务端 HTML 对媒体/存储钩子使用预期的初始值;更改
getInitialValueInEffect时,不会导致闪烁问题回归。 - 交互测试:外部点击节点(多节点列表使用状态回调;内部处理程序阻止事件传播时使用
capture: true)、跨平台的热键mod、焦点陷阱 + 合并 ref、卸载时防抖的cancel/flush。 - 迁移扫描:检查已移除的
useFullscreen、旧版鼠标/观察器 ref 模式以及已重命名的类型。
评论
支持 Markdown