Next.js Best Practices
Intermediatev1.0.0
> Principles for Next.js App Router development. Does it need...?
Content
> Principles for Next.js App Router development.
---
1. Server vs Client Components
Decision Tree
By Default
| Type | Use |
|---|---|
| **Server** | Data fetching, layout, static content |
| **Client** | Forms, buttons, interactive UI |
---
2. Data Fetching Patterns
Fetch Strategy
| Pattern | Use |
|---|---|
| **Default** | Static (cached at build) |
| **Revalidate** | ISR (time-based refresh) |
| **No-store** | Dynamic (every request) |
Data Flow
| Source | Pattern |
|---|---|
| Database | Server Component fetch |
| API | fetch with caching |
| User input | Client state + server action |
---
3. Routing Principles
File Conventions
| File | Purpose |
|---|---|
| `page.tsx` | Route UI |
| `layout.tsx` | Shared layout |
| `loading.tsx` | Loading state |
| `error.tsx` | Error boundary |
| `not-found.tsx` | 404 page |
Route Organization
| Pattern | Use |
|---|---|
| Route groups `(name)` | Organize without URL |
| Parallel routes `@slot` | Multiple same-level pages |
| Intercepting `(.)` | Modal overlays |
---
4. API Routes
Route Handlers
| Method | Use |
|---|---|
| GET | Read data |
| POST | Create data |
| PUT/PATCH | Update data |
| DELETE | Remove data |
Best Practices
- -Validate input with Zod
- -Return proper status codes
- -Handle errors gracefully
- -Use Edge runtime when possible
---
5. Performance Principles
Image Optimization
- -Use next/image component
- -Set priority for above-fold
- -Provide blur placeholder
- -Use responsive sizes
Bundle Optimization
- -Dynamic imports for heavy components
- -Route-based code splitting (automatic)
- -Analyze with bundle analyzer
---
6. Metadata
Static vs Dynamic
| Type | Use |
|---|---|
| Static export | Fixed metadata |
| generateMetadata | Dynamic per-route |
Essential Tags
- -title (50-60 chars)
- -description (150-160 chars)
- -Open Graph images
- -Canonical URL
---
7. Caching Strategy
Cache Layers
| Layer | Control |
|---|---|
| Request | fetch options |
| Data | revalidate/tags |
| Full route | route config |
Revalidation
| Method | Use |
|---|---|
| Time-based | `revalidate: 60` |
| On-demand | `revalidatePath/Tag` |
| No cache | `no-store` |
---
8. Server Actions
Use Cases
- -Form submissions
- -Data mutations
- -Revalidation triggers
Best Practices
- -Mark with 'use server'
- -Validate all inputs
- -Return typed responses
- -Handle errors
---
9. Anti-Patterns
| ❌ Don't | ✅ Do |
|---|---|
| 'use client' everywhere | Server by default |
| Fetch in client components | Fetch in server |
| Skip loading states | Use loading.tsx |
| Ignore error boundaries | Use error.tsx |
| Large client bundles | Dynamic imports |
---
10. Project Structure
---
> Remember: Server Components are the default for a reason. Start there, add client only when needed.
When to Use
This skill is applicable to execute the workflow or actions described in the overview.
FAQ
Discussion
Loading comments...