Bird
Raised Fist0
NextJSframework~5 mins

Server component restrictions in NextJS - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a key restriction of Next.js Server Components regarding browser APIs?
Server Components cannot use browser-only APIs like window, document, or localStorage because they run on the server, not in the browser.
Click to reveal answer
beginner
Can Server Components in Next.js use React hooks like useState or useEffect?
No, Server Components cannot use client-only React hooks such as useState or useEffect because they do not run in the browser and have no state or lifecycle.
Click to reveal answer
intermediate
Why can't Server Components import client components directly in Next.js?
Server Components can import client components, but client components must be marked with <code>"use client"</code>. This keeps server and client code separate.
Click to reveal answer
beginner
What kind of data fetching is recommended inside Next.js Server Components?
Server Components can fetch data directly using async/await because they run on the server, allowing secure and fast data fetching without exposing secrets to the client.
Click to reveal answer
beginner
Explain why Server Components cannot have event handlers like onClick.
Event handlers like onClick require client-side JavaScript to run. Server Components render HTML on the server and do not handle client events, so event handlers must be in Client Components.
Click to reveal answer
Which of the following is NOT allowed inside a Next.js Server Component?
ARendering JSX
BFetching data with async/await
CUsing <code>window</code> object
DImporting other Server Components
Can you use React's useState hook inside a Server Component?
ANo, never
BOnly if marked with "use client"
CYes, always
DOnly in Next.js 12
How do you mark a component as a Client Component in Next.js?
AUse <code>React.useClient()</code>
BAdd <code>"use client"</code> at the top of the file
CName the file with .client.js extension
DWrap component in <Client> tag
Why can't Server Components handle user events like clicks?
AThey don't render HTML
BThey only handle data fetching
CThey are deprecated
DThey run only on the server without client JavaScript
Which is a benefit of Server Components in Next.js?
AThey enable secure server-side data fetching
BThey run faster in the browser
CThey replace Client Components completely
DThey allow direct access to browser APIs
Describe the main restrictions of Next.js Server Components and why they exist.
Think about where Server Components run and what that means for code they can use.
You got /5 concepts.
    Explain how Server Components and Client Components work together in Next.js.
    Consider the roles of server and client in a web app.
    You got /5 concepts.

      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