using-the-use-hook
npx skills add https://github.com/djankies/claude-configs --skill using-the-use-hook
Agent 安装分布
Skill 文档
Using the use() Hook in React 19
Teaches when and how to use React 19’s new use() API: reads Promises (suspending component) and Context (conditionallyâinside if statements, loops, after early returns).
Activates when: User mentions use(), use hook, async patterns, Suspense + data fetching, conditional context, or useContext migration.
Key Capabilities vs. Traditional Hooks
| Feature | Hooks | use() |
|---|---|---|
| Conditional calls | â | â |
| After early return | â | â |
| Inside loops | â | â |
| Read Promises | â | â (suspends) |
| Error handling | try-catch | Error Boundary |
Usage Patterns
Reading Promises:
import { use, Suspense } from 'react';
async function fetchUser(id) {
const res = await fetch(`/api/users/${id}`);
return res.json();
}
function UserProfile({ userId }) {
return (
<Suspense fallback={<div>Loading...</div>}>
<UserData promise={fetchUser(userId)} />
</Suspense>
);
}
function UserData({ promise }) {
const user = use(promise);
return <div>{user.name}</div>;
}
Conditional Context Access:
import { use, createContext } from 'react';
const ThemeContext = createContext('light');
function Button({ isPrimary, children }) {
let className = 'button';
if (isPrimary) {
const theme = use(ThemeContext);
className += ` ${theme}`;
}
return <button className={className}>{children}</button>;
}
Reusable Custom Hook:
import { use, cache } from 'react';
const getUser = cache(async (id) => {
const res = await fetch(`/api/users/${id}`);
return res.json();
});
function useUser(userId) {
if (!userId) return null;
return use(getUser(userId));
}
Implementation Workflow
Async data: Pass Promise as prop from parent â wrap component in Suspense boundary â use use(promise) in child â catch errors with Error Boundary.
Conditional context: Replace useContext(Context) with use(Context) for flexibility across conditional branches, loops, post-early-return.
Migration from useContext: Find useContext(Context) calls â replace with use(Context) â benefits: now conditional if needed.
Requirements & Validation
MUST:
- Wrap
use(promise)in Suspense boundary with fallback - Use Error Boundary (not try-catch) for error handling
- Create Promises in parents/Server Components, pass as props
- Use
cache()wrapper to prevent duplicate requests
NEVER:
- Call
use()inside try-catch blocks - Create new Promises inside component (causes infinite loops)
- Use
use()outside Component/Hook functions - Omit Suspense boundary for Promises
Verify:
- Suspense boundary wraps every
use(promise)with fallback - Error Boundary catches Promise errors
- Promises created externally or with
cache()âstable across renders - All conditional logic branches tested
For comprehensive React 19 use() documentation:
research/react-19-comprehensive.md lines 241â311 (use API, Promise Patterns, useContext sections).