Next.js Hot Tips Cheatsheet

By Ankita Kulkarni

Routing

Use [slug] for single, predictable URL segments and Use [...slug] for multiple/nested segments

Dynamic Routes
 // Dynamic Routes:
 // matches: /blog/my-post
 `app/blog/[slug]/page.tsx`

 // Catch-all Routes:
 // matches: /blog/tech/nextjs/routing
 `app/blog/[...slug]/page.tsx`
 

Server Components vs Actions

Server Components never re-render on client and Server Actions get exposed as API endpoints

Server Components:
Useful for GET requests

Server Actions:
Useful for POST/PUT/DELETE requests

Image Optimization

Always use next/image instead of img, Provide width and height to prevent layout shift and Use priority for above-the-fold images

Image Component
 <Image
   width={500}
   height={300}
   sizes="(max-width: 768px) 100vw, (max-width: 900px) 50vw, 33vw"
   priority={true}
 />

Security Best Practices

Avoid NEXT_PUBLIC_ for sensitive vars, use "server-only" to prevent server code exposure, and add authentication to exposed Server Action endpoints

Security
 import "server-only"; // Prevent server code exposure

Data Sanitization

Use Zod for form validation and sanitization, define strict schemas for your data, and validate both client and server side

Zod Schema
 const schema = z.object({
   name: z.string().min(1),
   email: z.string().email(),
   age: z.number().min(18)
 });

Server-side Redirects

Use redirect to navigate to a new path and place outside try-catch blocks for better performance

Redirects
 import { redirect } from "next/navigation";

 try {
  redirect('/new-path');
 } catch (error) {
  console.error('Error redirecting:', error);
 }

Production Console Logs

Use "removeConsole" to exclude console logs in production while keeping specific console methods like errors

Console Configuration
 compiler: {
   removeConsole: {
     exclude: ["error"]
   }
 }

Caching

Check x-vercel-cache header to determine cache status: HIT (from cache), MISS (fresh request), or STALE (outdated). Next.js 14 caches by default

Cache Headers
 // Check x-vercel-cache header:
 HIT: From cache
 MISS: Fresh request
 STALE: Outdated cache
 // Next.js 14 caches by default

Server Actions Usage

Use form action for traditional form submissions or await serverAction() for programmatic calls with additional logic

Server Actions
 <form action={serverAction}>
   <button type="submit">Submit</button>
 </form>

 // Function call method:
 await serverAction();

Instant Updates

Use 'use server' directive to mark server-only functions, implement update logic, and call revalidatePath to ensure consistent data

Instant Updates
 'use server';

 async function updateCart() {
   // Update cart logic
   revalidatePath('/');
 }
 // Ensures consistent data

Ready to Dive Deeper into the Next.js Hot Tips Course?

Sign up for the Next.js Hot Tips Course below