Skip to main content

Understanding SSR, SSG, and ISR in Next.js: Pages Router vs. App Router

Next.js Pages Router vs App Router

Next.js Pages Router vs App Router

Next.js provides two routing and data-fetching strategies: Pages Router (pages/) and App Router (app/). Each has its own way of handling Server-Side Rendering (SSR), Static Site Generation (SSG), and Incremental Static Regeneration (ISR).

Comparison Table

Feature Pages Router (pages/) App Router (app/)
SSR (Server-Side Rendering) getServerSideProps fetch() with cache: "no-store"
SSG (Static Site Generation) getStaticProps fetch() with cache: "force-cache"
ISR (Incremental Static Regeneration) getStaticProps + revalidate: X fetch() with { next: { revalidate: X } }
Client-Side Rendering (CSR) Using useEffect() with fetch() Using useEffect() with fetch() (same as Pages Router)
Nested Layouts Not supported Supported via layout.tsx
Middleware Available via middleware.ts Available via middleware.ts

Server-Side Rendering (SSR)

Pages Router (pages/)

export async function getServerSideProps() {
    const res = await fetch('https://api.example.com/data');
    const data = await res.json();
    return { props: { data } };
}
    

App Router (app/)

async function getData() {
    const res = await fetch('https://api.example.com/data', { cache: "no-store" });
    return res.json();
}
    

Static Site Generation (SSG)

Pages Router (pages/)

export async function getStaticProps() {
    const res = await fetch('https://api.example.com/data');
    const data = await res.json();
    return { props: { data } };
}
    

App Router (app/)

async function getData() {
    const res = await fetch('https://api.example.com/data', { cache: "force-cache" });
    return res.json();
}
    

Incremental Static Regeneration (ISR)

Pages Router (pages/)

export async function getStaticProps() {
    const res = await fetch('https://api.example.com/data');
    const data = await res.json();
    return { props: { data }, revalidate: 60 };
}
    

App Router (app/)

async function getData() {
    const res = await fetch('https://api.example.com/data', { next: { revalidate: 60 } });
    return res.json();
}
    

Client-Side Rendering (CSR)

import { useEffect, useState } from 'react';

export default function Component() {
    const [data, setData] = useState(null);

    useEffect(() => {
        fetch('https://api.example.com/data')
            .then(res => res.json())
            .then(setData);
    }, []);

    if (!data) return <p>Loading...</p>;
    return <pre>{JSON.stringify(data, null, 2)}</pre>;
}
    

Nested Layouts in App Router

// app/layout.tsx
export default function Layout({ children }) {
    return (
        <div>
            <header>Header</header>
            <main>{children}</main>
            <footer>Footer</footer>
        </div>
    );
}
    

Conclusion

The App Router provides a more flexible and modern approach with nested layouts, React Server Components, and better data fetching capabilities. However, Pages Router is still useful for existing projects.

Comments

Popular posts from this blog

DevOps Best Practices

 # DevOps Best Practices: Your Ultimate Guide to Modern Software Development In today's fast-paced tech world, DevOps isn't just a buzzword – it's a game-changer. Let's dive into the essential practices that can transform your software development process. ![DevOps Lifecycle](https://blogger.googleusercontent.com/img/placeholder.png) ## 🔄 1. Continuous Integration (CI) - The Foundation Think of CI as your code's quality guardian. Every time developers push code, automated tests run to catch issues early. Here's what makes great CI: - Automated builds triggered with every commit - Comprehensive test suites running automatically - Code quality checks integrated into the pipeline - Quick feedback loops to developers **Pro Tip:** Start with simple automated tests and gradually build up your test suite. Remember, it's better to have a few reliable tests than many unreliable ones. ## 🚀 2. Continuous Delivery (CD) - From Code to Customer CD ensures your software ...

Introduction to Cloud Computing: Revolutionizing the Digital Landscape

In today's rapidly evolving digital world, cloud computing stands as a cornerstone of modern technology, transforming how businesses operate and individuals interact with data. Let's dive deep into this fascinating technology that powers our digital future. ## What is Cloud Computing? Imagine having a virtual supercomputer at your fingertips, accessible from anywhere in the world. That's the essence of cloud computing – a technology that delivers computing services such as storage, databases, software, and processing power over the internet, eliminating the need for physical hardware investments. ## The Three Pillars of Cloud Service Models ### Infrastructure as a Service (IaaS) Think of IaaS as renting the digital building blocks of computing. Companies like Amazon Web Services (AWS) and Microsoft Azure provide virtual machines, storage, and networking resources on-demand. This model offers unprecedented flexibility, allowing businesses to scale their infrastructure up or ...

How to Fix "ERESOLVE Unable to Resolve Dependency Tree" Error While Creating a React App

How to Fix Dependency Errors While Creating a React App If you're trying to set up a React app using npx create-react-app and encounter the following error: npm error code ERESOLVE npm error ERESOLVE unable to resolve dependency tree npm error Found: react@19.0.0 npm error Could not resolve dependency: npm error peer react@"^18.0.0" from @testing-library/react@13.4.0 Don't worry! This issue occurs due to dependency conflicts between react , react-dom , and other packages like @testing-library/react . Below are two simple ways to fix this issue. Step 1: Try Fixing It With npm Before switching to Yarn, you can resolve the issue by installing the missing or incompatible dependencies manually. Here's how: After running npx create-react-app my-app , if the error appears, navigate to your project folder: cd my-app Install the missing web-vitals dependency: npm install web-vitals Check for other dependency ...