
- Next.js - Home
- Next.js - Overview
- Next.js - Project Setup
- Next.js - Folder Structure
- Next.js - App Router
- Next.js - Page Router
- Next.js Features
- Next.js - Pages
- Next.js - Data Fetching
- Next.js - ISR
- Next.js - Static File Serving
- Next.js - Pre-Rendering
- Next.js - Partial Pre Rendering
- Next.js - Server Side Rendering
- Next.js - Client Side Rendering
- Next.js Routing
- Next.js - Routing
- Next.js - Nested Routing
- Next.js - Dynamic Routing
- Next.js - Parallel Routing
- Next.js - Imperative Routing
- Next.js - Shallow Routing
- Next.js - Intercepting Routes
- Next.js - Redirecting Routes
- Next.js - Navigation and Linking
- Next.js Configuration
- Next.js - TypeScript
- Next.js - Environment Variables
- Next.js - File Conventions
- Next.js - ESLint
- Next.js API & Backend
- Next.js - API Routes
- Next.js - Dynamic API Routes
- Next.js - Route Handlers
- Next.js - API MiddleWares
- Next.js - Response Helpers
- Next.js API Reference
- Next.js - CLI Commands
- Next.js - Functions
- Next.js - Directives
- Next.js - Components
- Next.js - Image Component
- Next.js - Font Component
- Next.js - Head Component
- Next.js - Form Component
- Next.js - Link Component
- Next.js - Script Component
- Next.js Styling & SEO
- Next.js - CSS Support
- Next.js - Global CSS Support
- Next.js - Meta Data
- Next.js Advanced Topics
- Next.js - Error Handling
- Next.js - Server Actions
- Next.js - Fast Refresh
- Next.js - Internationalization
- Next.js - Authentication
- Next.js - Session Management
- Next.js - Authorization
- Next.js - Caching
- Next.js - Data Caching
- Next.js - Router Caching
- Next.js - Full Route Caching
- Next.js - Request Memoization
- Next.js Performance Optimization
- Next.js - Optimizations
- Next.js - Image Optimization
- Next.js - Lazy Loading
- Next.js - Font Optimization
- Next.js - Video Optimization
- Next.js - Script Optimization
- Next.js - Memory Optimization
- Next.js - Using OpenTelemetry
- Next.js - Package Bundling Optimization
- Next.js Testing
- Next.js - Testing
- Next.js - Testing with Jest
- Next.js - Testing with Cypress
- Next.js - Testing with Vitest
- Next.js - Testing with Playwright
- Next.js Debugging & Deployment
- Next.js - Debugging
- Next.js - Deployment
- Next.js Useful Resources
- Next.js - Interview Questions
- Next.js - Quick Guide
- Next.js - Useful Resources
- Next.js - Discussion
Next.js - getServerSideProps() Function
The getServerSideProps() Function
The Next.js getServerSideProps() function is used to fetch data dynamically at request time for pre-rendering a page. This method runs on server side and fetches data on every request. It is commonly used when data on the page changes frequently, or when the data depends on the request (e.g., authentication, query parameters, etc.).
Syntax
Following is syntax of getServerSideProps() function:
export async function getServerSideProps(context) { // Perform server-side logic, such as fetching data const data = await fetch('link/to/api').then(res => res.json()); // Return the data as props return { props: { data, // This will be passed to the page component }, }; }
Parameters
The method takes a 'context' object as its parameter. This object will provide helpful information to the function such as:
- params: An object containing the route parameters for the page.
- req: The HTTP request object.
- res: The HTTP response object.
- query: An object containing the query string parameters.
Return Value
The method returns an object with a 'props' key. The value of this key is an object containing the data that will be passed to the page component as props.
Key Points
- The function runs only on server side, which means it will not be included in Javascript bundle at build time.
- Each time user visits the page, the data is fetched from the server.
- It is recommended to use getServerSideProps when your server data is changing frequently or depends on the request such as query parameters, headers, cookies, etc.
Example 1
In this example, we are fetching a list of blog posts from an API using getServerSideProps method and displaying them on the page.
export async function getServerSideProps() { const res = await fetch('https://jsonplaceholder.typicode.com/posts'); const posts = await res.json(); return { props: { posts, }, }; } export default function Blog({ posts }) { return ( <div> <h1>Blog Posts</h1> <ul> {posts.map((post) => ( <li key={post.id}> <h2>{post.title}</h2> <p>{post.body}</p> </li> ))} </ul> </div> ); }
Output

Example 2
In this example, we are fetching a single blog post based on the id provided in the URL query parameter. We used the context.query object to get the id user entered in the URL, then fetched the post data from the API using that id.
export async function getServerSideProps(context) { const { id } = context.query; const res = await fetch(`https://jsonplaceholder.typicode.com/posts/${id}`); const post = await res.json(); return { props: { post, }, }; } export default function Post({ post }) { return ( <div> <h1>{post.title}</h1> <p>{post.body}</p> </div> ); }
Output
