Loading...
Loading...
Modern React with hooks and functional components. Trigger: When creating components, implementing hooks, managing state, or optimizing.
npx skill4agent add joabgonzalez/ai-agents-framework react// CORRECT: Functional component with hooks
const Counter: React.FC = () => {
const [count, setCount] = useState(0);
return <button onClick={() => setCount(count + 1)}>{count}</button>;
};
// WRONG: Class component (legacy)
class Counter extends React.Component {
state = { count: 0 };
render() { /* ... */ }
}// CORRECT: All dependencies included
useEffect(() => {
fetchData(userId);
}, [userId]);
// WRONG: Missing dependencies (stale closures)
useEffect(() => {
fetchData(userId);
}, []); // userId missing// CORRECT: Unique IDs
{items.map(item => <li key={item.id}>{item.name}</li>)}
// WRONG: Array index (bugs on reorder/delete)
{items.map((item, index) => <li key={index}>{item.name}</li>)}// WRONG: Breaks React rules
if (condition) {
const [value, setValue] = useState(0);
}
// CORRECT: Hooks at top level, conditional logic inside
const [value, setValue] = useState(0);
const shouldUse = condition ? value : defaultValue;conventionsa11yuseStateuseReduceruseEffectuseEffectuseMemouseCallback&&import { useState, useMemo } from 'react';
interface TodoProps {
items: string[];
}
const TodoList: React.FC<TodoProps> = ({ items }) => {
const [filter, setFilter] = useState('');
const filteredItems = useMemo(() =>
items.filter(item => item.toLowerCase().includes(filter.toLowerCase())),
[items, filter]
);
return (
<div>
<input value={filter} onChange={(e) => setFilter(e.target.value)} />
<ul>
{filteredItems.map((item, index) => (
<li key={index}>{item}</li>
))}
</ul>
</div>
);
};setState(prev => prev + 1)useEffect(() => {
const timer = setInterval(() => {}, 1000);
return () => clearInterval(timer);
}, []);useRefuseStateflushSyncReact.ReactNode{(data) => <Component data={data} />}