Common Next.js anti-patterns: useEffect misuse (data fetch, browser detect), useState for server data, Pages Router patterns, serial await, over-using 'use client'.
| Anti-Pattern | Solution |
|---|---|
| useEffect for data fetch | Server Component async fetch |
| useEffect for browser detect | Direct detection in body |
| useState for server data | Server Component (no state) |
| Serial await | Promise.all() or Suspense |
| 'use client' everywhere | Only for hooks/events |
// ❌ WRONG
useEffect(() => {
fetch('/api/posts').then(setPosts);
}, []);
// ✅ CORRECT
export default async function Posts() {
const posts = await fetch('https://api.example.com/posts').then(r => r.json());
return <ul>{posts.map(p => <li key={p.id}>{p.title}</li>)}</ul>;
}