Bird
Raised Fist0
NextJSframework~10 mins

Server component restrictions in NextJS - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to export a server component in Next.js.

NextJS
export default function Home() {
  return <h1>Hello from [1] component!</h1>;
}
Drag options to blanks, or click blank then click option'
Aserver
Bclient
Cshared
Dstatic
Attempts:
3 left
💡 Hint
Common Mistakes
Confusing server components with client components
Adding 'use client' directive by mistake
2fill in blank
medium

Complete the code to import a client component inside a server component.

NextJS
import ClientButton from './ClientButton';

export default function ServerPage() {
  return <div><[1] /></div>;
}
Drag options to blanks, or click blank then click option'
AClientComponent
BServerButton
CButton
DClientButton
Attempts:
3 left
💡 Hint
Common Mistakes
Using a wrong component name
Trying to render a server component as client
3fill in blank
hard

Fix the error in the server component by completing the code to fetch data correctly.

NextJS
export default async function DataPage() {
  const res = await fetch('/api/data', { cache: '[1]' });
  const data = await res.json();
  return <pre>{JSON.stringify(data)}</pre>;
}
Drag options to blanks, or click blank then click option'
Aforce-cache
Bdefault
Cno-store
Dreload
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'force-cache' causing stale data
Omitting cache option leading to unexpected caching
4fill in blank
hard

Fill both blanks to correctly mark a component as client and use state in Next.js.

NextJS
"use [1]";

import { [2] } from 'react';

export default function Counter() {
  const [count, setCount] = useState(0);
  return <button onClick={() => setCount(count + 1)}>{count}</button>;
}
Drag options to blanks, or click blank then click option'
Aclient
Bserver
CuseState
DuseEffect
Attempts:
3 left
💡 Hint
Common Mistakes
Forgetting 'use client' directive
Importing wrong React hooks
5fill in blank
hard

Fill all three blanks to create a server component that fetches data and renders a list.

NextJS
export default async function UsersList() {
  const res = await fetch('[1]', { cache: '[2]' });
  const users = await res.json();
  return (
    <ul>
      {users.map(user => <li key={user.id}>[3]</li>)}
    </ul>
  );
}
Drag options to blanks, or click blank then click option'
A/api/users
Bno-store
Cuser.name
D/api/data
Attempts:
3 left
💡 Hint
Common Mistakes
Using wrong API endpoint
Caching data causing stale results
Rendering wrong user property

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