Teaches when to use local state vs global state (Context) in React 19. Use when deciding state management strategy, avoiding prop drilling, or architecting component state.
Helps decide between local state, lifted state, or Context for React 19. Triggers when you're architecting component state, avoiding prop drilling, or need to optimize re-renders.
/plugin marketplace add djankies/claude-configs/plugin install react-19@claude-configsThis skill is limited to using the following tools:
Use Local State (useState) when:
Use Lifted State when:
Use Context when:
Local State:
function Counter() {
const [count, setCount] = useState(0);
return <button onClick={() => setCount(count + 1)}>Count: {count}</button>;
}
Lifted State:
function Parent() {
const [filter, setFilter] = useState('all');
return (
<>
<FilterButtons filter={filter} setFilter={setFilter} />
<ItemList filter={filter} />
</>
);
}
Context (React 19 with use()):
import { createContext, use } from 'react';
const ThemeContext = createContext('light');
function App() {
const [theme, setTheme] = useState('light');
return (
<ThemeContext value={{ theme, setTheme }}>
<Layout />
</ThemeContext>
);
}
function DeepComponent() {
const { theme, setTheme } = use(ThemeContext);
return <button onClick={() => setTheme(theme === 'light' ? 'dark' : 'light')}>
Toggle Theme
</button>;
}
❌ Context for frequently changing state:
const MousePositionContext = createContext();
function App() {
const [position, setPosition] = useState({ x: 0, y: 0 });
useEffect(() => {
const handler = (e) => setPosition({ x: e.clientX, y: e.clientY });
window.addEventListener('mousemove', handler);
return () => window.removeEventListener('mousemove', handler);
}, []);
return (
<MousePositionContext value={position}>
<App />
</MousePositionContext>
);
}
This causes re-render of entire tree on every mouse move!
✅ Local state or ref instead:
function Component() {
const [position, setPosition] = useState({ x: 0, y: 0 });
useEffect(() => {
const handler = (e) => setPosition({ x: e.clientX, y: e.clientY });
window.addEventListener('mousemove', handler);
return () => window.removeEventListener('mousemove', handler);
}, []);
return <div>Mouse: {position.x}, {position.y}</div>;
}
For comprehensive state management patterns, see: research/react-19-comprehensive.md lines 1293-1342.
This skill should be used when the user asks to "create a hookify rule", "write a hook rule", "configure hookify", "add a hookify rule", or needs guidance on hookify rule syntax and patterns.