CourseCommunityPricingBoilerplates
Get Started

Products

CourseBoilerplatesPricing

Resources

CommunityGitHubYouTube

Contribute

Write for UsStyle Guide

Legals

Privacy PolicyTerms of ServiceContact Us
©2025TheDevSpace.io| All Rights Reserved
Table of Contents
  • Fetching data on the server from API
  • Fetching data on the server from database
  • Fetching data on the client from API
  • Parallel fetching vs. sequential fetching

How to Fetch Data in Next.js with Different Data Fetching Patterns

<Database IntegrationError Handling>

In this lesson, we are going to discuss how to fetch data in various parts of a Next.js application, including API routes, server actions, server components, as well as client components. We'll also introduce and compare two data fetching patterns, sequential fetching and parallel fetching.

Just in case you need a refresher on concepts such as API routes, server actions, server components, and client components, here is a brief review:

  • Routes: Next.js implements a file based routing system, the files and folders inside the app directory maps to the routes to access the webpages and API endpoints.
  • Pages: The webpage is defined by a page.jsx file.
    • Server Components: By default, the webpages are rendered on the server to provide better performance, faster loading time, and better user experience.
    • Client Components: You can opt into client side rendering using a "use client" directive, giving access to React features such as state management, context, reducers, and more. Injecting interactivity into you web app.
  • API Route Handlers: The API endpoint is defined by a route.js file.
  • Server Actions: A piece of code that can be used inside server or client component, but will be executed on the server. Most commonly used for form handling, allows you to submit the form without creating a dedicated API endpoint.

Fetching data on the server from API

The most commonly used method for data fetching is by using the fetch() API. It is the default interface for making HTTP requests using JavaScript, and also processing the responses. For example:

jsx
1export default async function Page() {
2  const res = await fetch("https://dummyjson.com/users");
3  const data = await res.json();
4  return (
5    <ul>
6      {data.users.map((user) => (
7        <li key={user.id}>
8          {user.firstName} {user.lastName}
9        </li>
10      ))}
11    </ul>
12  );
13}

The fetch() API allows you to set extra options, including:

  • The method option allows you to specify the HTTP method used to send the request, such as GET, POST, PUT, or DELETE.
  • The body option allows you to include the request payload, often in formats like JSON, which the API endpoint can process to handle the request.
  • The headers option allows you to define additional metadata for the request, such as Content-Type to specify the media type of the request body, or Authorization to include authentication tokens.
javascript
1const res = await fetch("https://dummyjson.com/users", {
2  method: "POST",
3  body: JSON.stringify({
4    firstName: "John",
5    lastName: "Doe",
6    email: "john@thedevspace.io",
7  }),
8  headers: {
9    "Content-Type": "application/json",
10  },
11});

Fetching data on the server from database

Wait, there is more!

Please create an account to access this content.

From HTML & CSS to JavaScript, from basic language syntaxes to web development frameworks, from the frontend to the backend, we'll guide you through every step of your coding journey.

🎉 Create an Account 🎉
<Database IntegrationError Handling>

Subscribe below to grab our free Full-Stack Web Developer Starter Kit 👇

Also follow us onorwhere we share coding tips daily.

Course Outline
Introduction+
  • 1.WebDev Fundamentals
HTML & CSS+
  • 1.Preparations
  • 2.HTML Elements
  • 3.Query Selectors
  • 4.Colors
  • 5.Typography
  • 6.Text Customization
  • 7.Text Spacing & Alignment
  • 8.Functions & At Rules
  • 9.Links
  • 10.Lists
  • 11.Tables
  • 12.Forms
  • 13.Media Files
  • 14.The Box Model
  • 15.Display Types
  • 16.Overflow
  • 17.Object Fit
  • 18.Aspect Ratio
  • 19.Float
  • 20.Position
  • 21.The Column Layout
  • 22.The Grid Layout
  • 23.The Flexbox Layout
  • 24.Justify & Align
  • 25.Z index
  • 26.Visibility & Opacity
  • 27.Box Shadow
  • 28.Backgrounds
  • 29.Gradient
  • 30.Blend Modes
  • 31.Filters
  • 32.Transforms
  • 33.Transitions
  • 34.Animations
  • 35.Cursor & Scroll Behavior
  • 36.Responsive Design
  • 37.Responsive Media & Text
  • 38.Responsive Layout
  • 39.Best Practices
  • 40.Project #1: Recreating YouTube
  • 41.Project #2: Calculator Part 1
TailwindCSS+
  • 1.Introducing TailwindCSS
JavaScript+
  • 1.Introduction
  • 2.Setting Up a Dev Environment
  • 3.Basic Syntax
  • 4.Data Types
  • 5.Numbers & BigInt
  • 6.Strings
  • 7.Boolean Values
  • 8.Undefined & Null
  • 9.Type Conversion
  • 10.Arrays
  • 11.Objects
  • 12.Maps & Sets
  • 13.If Statements
  • 14.Switch Statements
  • 15.While Loops
  • 16.For Loops
  • 17.Functions
  • 18.Variables & Scope
  • 19.Rest Parameter & Spread Syntax
  • 20.Pure Functions
  • 21.Higher Order Functions
  • 22.Recursion
  • 23.Methods
  • 24.Constructor Functions
  • 25.Getters & Setters
  • 26.Prototypes
  • 27.The Class Notation
  • 28.Class Inheritance
  • 29.Static Properties
  • 30.Private Properties
  • 31.Object Oriented Programming
  • 32.Error Handling
  • 33.Asynchronous Programming
  • 34.Promise
  • 35.Async & Wait
  • 36.JavaScript Modules
  • 37.The DOM Tree
  • 38.Manipulation the DOM
  • 39.Event Handling
  • 40.Some Common Events
  • 41.Canvas
  • 42.Project #3: Image Slider
  • 43.Project #4: Drawing Board
  • 44.Working with Date
  • 45.The Math Object
  • 46.JSON
  • 47.Regular Expressions
  • 48.Define Patterns with Regex
  • 49.Regex Related Methods
  • 50.Project #5: Calculator Part 2
Express.js+
  • 1.Network & HTTP
  • 2.A Basic Web App
  • 3.Express.js
  • 4.Model Layer
  • 5.View Layer
  • 6.Controller Layer
  • 7.Form Handling
  • 8.Uploading Files
  • 9.Project #6: Blog
  • 10.Loading Static Files
  • 11.ORM Integration
  • 12.Adding Relations
  • 13.Middleware
  • 14.Browser Data Storage
  • 15.User Authentication
  • 16.REST API
  • 17.Best Practices
  • 18.Going to Production
React.js+
  • 1.Fundamentals
  • 2.JSX
  • 3.Conditional Rendering
  • 4.List Rendering
  • 5.Components
  • 6.Props
  • 7.Adding Styles
  • 8.Event Handling
  • 9.Introducing State
  • 10.State Management
  • 11.Form Handling
  • 12.Reducer
  • 13.Context
  • 14.Refs
  • 15.Effects
  • 16.Hooks
  • 17.Rules of React
  • 18.Project #7: Todo List
  • 19.Project #8: Weather App
  • 20.Project #9: Blog
  • 21.React.js Optimization
Next.js+
  • 1.Next.js Basics
  • 2.Routing
  • 3.Pages & Layout
  • 4.Server vs. Client Components
  • 5.API Routes
  • 6.Server Actions
  • 7.Database Integration
  • 8.Data Fetching
  • 9.Error Handling
  • 10.Middleware
  • 11.Links, Navigation & Redirection
  • 12.Images
  • 13.Scripts
  • 14.Fonts
  • 15.Lazy Loading
  • 16.Caching
  • 17.Loading UI
  • 18.Project #10: SaaS
  • 19.User Authentication
  • 20.Magic Link
  • 21.Custom Emails
  • 22.Protecting Routes
  • 23.OAuth Providers
  • 24.Dashboard
  • 25.Role Based Access Control
  • 26.Payment Integration
  • 27.Pricing Page
  • 28.Stripe Checkout
  • 29.Payment Webhook
Miscellaneous+
  • 1.Optimize Your Web App
Recent Community Articles
  • How to Build Interactive Forms Using HTML and CSS
  • How to Create a Modern App with Django and Vue
  • How to Send HTTP Requests Using JavaScript
  • Vue.js Fundamentals
  • How to Reverse a String in JavaScript
  • How to Reverse an Array in JavaScript
  • JavaScript Fundamentals 2025
  • How to Implement Pagination with JavaScript
  • Laravel Fundamentals
  • Django Fundamentals