About react-components
A skill that guides developers in building maintainable React components with functional components, hooks, and composition patterns.
Key features
- 01Functional components with hooks
- 02Reusable custom hooks
- 03Composition over prop drilling
Use cases
- 01Structuring a React component around hooks
- 02Extracting asynchronous logic into a custom hook
- 03Composing components to avoid prop drilling
Install
Copy the command and run it in a terminal.
$
npx skills add https:/ / github.com/ langchain-ai/ skills-benchmarks --skill react-componentsAfter installing, type/react-componentsin Claude Code to confirm it loaded.
Details
From the project READMEReact Component Patterns
Build maintainable React components using modern patterns.
Functional Components with Hooks
Always prefer functional components over class components:
import { useState, useEffect, useCallback } from 'react';
interface UserProps {
userId: string;
onUpdate?: (user: User) => void;
}
export function UserProfile({ userId, onUpdate }: UserProps) {
const [user, setUser] = useState<User | null>(null);
const [loading, setLoading] = useState(true);
useEffect(() => {
fetchUser(userId).then(setUser).finally(() => setLoading(false));
}, [userId]);
const handleSave = useCallback(async (data: UserData) => {
const updated = await updateUser(userId, data);
setUser(updated);
onUpdate?.(updated);
}, [userId, onUpdate]);
if (loading) return <Skeleton />;
if (!user) return <NotFound />;
return <UserForm user={user} onSave={handleSave} />;
}
Custom Hooks
Extract reusable logic into custom hooks:
function useAsync<T>(asyncFn: () => Promise<T>, deps: any[]) {
const [state, setState] = useState<AsyncState<T>>({
loading: true,
error: null,
data: null,
});
useEffect(() => {
setState(s => ({ ...s, loading: true }));
asyncFn()
.then(data => setState({ loading: false, error: null, data }))
.catch(error => setState({ loading: false, error, data: null }));
}, deps);
return state;
}
Component Composition
Use composition over prop drilling:
<Card>
<Card.Header>Title</Card.Header>
<Card.Body>{content}</Card.Body>
<Card.Footer>
<Button>Action</Button>
</Card.Footer>
</Card>
Comments
Markdown supported