Bird
Raised Fist0
NextJSframework~5 mins

Server component restrictions in NextJS

Choose your learning style10 modes available
Introduction

Server components run only on the server to keep your app fast and secure. They cannot use browser-only features.

When fetching data directly from a database or API without exposing secrets.
When rendering static content that does not need user interaction.
When you want to keep sensitive logic hidden from the browser.
When you want to improve performance by reducing client-side JavaScript.
When you want to separate server logic from client UI code.
Syntax
NextJS
export default function MyServerComponent() {
  // Server-only code here
  return <div>Hello from server</div>;
}

Server components cannot use hooks like useState or useEffect.

They cannot access browser APIs like window or document.

Examples
Fetching data directly on the server and rendering it.
NextJS
export default async function ServerComponent() {
  const res = await fetch('https://api.example.com/data');
  const data = await res.json();
  return <pre>{JSON.stringify(data)}</pre>;
}
Trying to use browser API 'window' in server component causes error.
NextJS
export default function ServerComponent() {
  // This will cause an error
  // console.log(window.location.href);
  return <div>Cannot use window here</div>;
}
Sample Program

This server component fetches a todo item from an API and renders it. It runs only on the server, so it can safely fetch data without exposing API keys or secrets.

NextJS
import React from 'react';

export default async function ServerComponent() {
  const res = await fetch('https://jsonplaceholder.typicode.com/todos/1');
  const todo = await res.json();

  return (
    <main>
      <h1>Todo Item</h1>
      <p><strong>Title:</strong> {todo.title}</p>
      <p><strong>Completed:</strong> {todo.completed ? 'Yes' : 'No'}</p>
    </main>
  );
}
OutputSuccess
Important Notes

Server components cannot use React hooks that depend on the browser.

They can import other server components or client components.

Use client components when you need interactivity or browser APIs.

Summary

Server components run only on the server and cannot use browser features.

They are great for data fetching and rendering static content securely.

Use client components for interactive UI and browser-dependent code.

Practice

(1/5)
1. Which of the following is NOT allowed inside a Next.js server component?
easy
A. Using window.alert() to show a popup
B. Using fetch to get data from an API
C. Accessing the file system with fs module
D. Rendering static HTML content

Solution

  1. Step 1: Understand server component environment

    Server components run only on the server and do not have access to browser APIs like window.
  2. Step 2: Identify browser-only features

    Using window.alert() requires a browser environment, so it is not allowed in server components.
  3. Final Answer:

    Using window.alert() to show a popup -> Option A
  4. Quick Check:

    Browser APIs forbidden in server components = B [OK]
Hint: Server components can't use browser-only APIs like window [OK]
Common Mistakes:
  • Thinking fetch is a browser-only API
  • Assuming file system access is disallowed
  • Confusing client and server component roles
2. Which syntax correctly marks a component as a server component in Next.js?
easy
A. 'use server'; export default function MyComponent() { return
Hello
}
B. 'use client'; export default function MyComponent() { return
Hello
}
C. export default function MyComponent() { return
Hello
}
D. 'use client'; export const MyComponent = () =>
Hello

Solution

  1. Step 1: Recall default component type

    By default, components in Next.js are server components unless marked otherwise.
  2. Step 2: Identify client directive usage

    Adding 'use client' marks a component as client-side, so 'use client'; export default function MyComponent() { return <div>Hello</div> } is client, not server.
  3. Final Answer:

    export default function MyComponent() { return <div>Hello</div> } -> Option C
  4. Quick Check:

    Default is server component = A [OK]
Hint: No 'use client' means server component by default [OK]
Common Mistakes:
  • Adding 'use server' which is not a valid directive
  • Confusing arrow function export with client directive
  • Assuming explicit 'use server' is required
3. What will happen if you try to use useState hook inside a Next.js server component?
medium
A. It will convert the component to a client component automatically
B. It will work normally and manage state on the server
C. It will silently ignore the state and render static content
D. It will cause a runtime error because hooks are client-only

Solution

  1. Step 1: Understand hook restrictions in server components

    Hooks like useState require a browser environment and are only valid in client components.
  2. Step 2: Identify behavior when used in server components

    Using useState in server components causes a runtime error because state management is not supported there.
  3. Final Answer:

    It will cause a runtime error because hooks are client-only -> Option D
  4. Quick Check:

    useState only works in client components = A [OK]
Hint: useState is client-only; server components error if used [OK]
Common Mistakes:
  • Thinking useState works on server for pre-rendering
  • Assuming server components can manage interactive state
  • Believing server components auto-convert to client
4. You wrote this server component code but get an error:
import { useEffect } from 'react';

export default function Page() {
  useEffect(() => { console.log('Hello'); });
  return <div>Welcome</div>;
}

What is the main cause of the error?
medium
A. You cannot import from 'react' in server components
B. useEffect is a client-only hook and cannot be used in server components
C. Missing 'use client' directive at the top of the file
D. The return statement must be wrapped in a fragment

Solution

  1. Step 1: Identify hook usage in server components

    Hooks like useEffect run only in client components because they depend on browser lifecycle.
  2. Step 2: Understand error cause

    Using useEffect in a server component causes an error since server components do not support client hooks.
  3. Final Answer:

    useEffect is a client-only hook and cannot be used in server components -> Option B
  4. Quick Check:

    useEffect forbidden in server components = C [OK]
Hint: useEffect only works in client components, not server [OK]
Common Mistakes:
  • Thinking 'use client' fixes the error without adding directive
  • Assuming import from 'react' is disallowed
  • Believing return must be wrapped in fragment
5. You want to fetch data securely on the server and display it in a component. Which approach respects Next.js server component restrictions?
hard
A. Create a server component that uses fetch to get data and renders it directly
B. Create a client component that uses fetch inside useEffect to load data
C. Create a server component that uses window.fetch to get data
D. Create a client component that reads data from the file system

Solution

  1. Step 1: Identify secure data fetching method

    Server components can use fetch directly on the server to securely get data before rendering.
  2. Step 2: Eliminate invalid options

    Client components fetch data in the browser, less secure; window.fetch does not exist on server; file system access is server-only.
  3. Final Answer:

    Create a server component that uses fetch to get data and renders it directly -> Option A
  4. Quick Check:

    Server fetch for secure data = D [OK]
Hint: Fetch data in server components for security, not client hooks [OK]
Common Mistakes:
  • Using window.fetch in server components
  • Fetching data in client components unnecessarily
  • Trying to access file system in client components
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard