Use when React Context patterns for state management. Use when sharing state across component trees without prop drilling.
View on GitHubTheBushidoCollective/han
jutsu-react
January 24, 2026
Select agents to install to:
npx add-skill https://github.com/TheBushidoCollective/han/blob/main/jutsu/jutsu-react/skills/react-context-patterns/SKILL.md -a claude-code --skill react-context-patternsInstallation paths:
.claude/skills/react-context-patterns/# React Context Patterns
Master react context patterns for building high-performance, scalable
React applications with industry best practices.
## Understanding Prop Drilling vs Context
Prop drilling occurs when you pass props through multiple layers of components
that don't need them, just to reach a deeply nested component.
```typescript
// Prop Drilling (AVOID)
function App() {
const [user, setUser] = useState<User | null>(null);
return <Layout user={user} setUser={setUser} />;
}
function Layout({ user, setUser }: Props) {
// Layout doesn't use user, just passes it down
return <Sidebar user={user} setUser={setUser} />;
}
function Sidebar({ user, setUser }: Props) {
// Sidebar doesn't use user, just passes it down
return <UserMenu user={user} setUser={setUser} />;
}
function UserMenu({ user, setUser }: Props) {
// Finally used here
return <div>{user?.name}</div>;
}
```
Context solves this by providing a way to share values between components without
explicitly passing props through every level:
```typescript
// Using Context (BETTER)
const UserContext = createContext<UserContextType | undefined>(undefined);
function App() {
const [user, setUser] = useState<User | null>(null);
return (
<UserContext.Provider value={{ user, setUser }}>
<Layout />
</UserContext.Provider>
);
}
function Layout() {
return <Sidebar />; // No props needed
}
function Sidebar() {
return <UserMenu />; // No props needed
}
function UserMenu() {
const { user } = useContext(UserContext);
return <div>{user?.name}</div>;
}
```
## Creating and Using Context with TypeScript
```typescript
import { createContext, useContext, useState, ReactNode } from 'react';
interface User {
id: string;
name: string;
email: string;
role: 'admin' | 'user';
}
interface AuthContextType {
user: User | null;
login: (email: string, password: string) => Promise<void>;
logout: () => void;
isAuthenticated: boolean;
isLoading: boolean;
}
const Aut