Bird
Raised Fist0
NextJSframework~5 mins

Async server components in NextJS - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is an async server component in Next.js?
An async server component is a React component that runs on the server and can use async/await to fetch data before rendering. It helps deliver fully rendered HTML to the client for faster load times.
Click to reveal answer
beginner
Why use async server components instead of client components for data fetching?
Async server components fetch data on the server, so the client gets ready-to-use HTML. This reduces client work, improves performance, and avoids loading spinners or empty states on the page.
Click to reveal answer
intermediate
How do you define an async server component in Next.js?
You define it as an async function that returns JSX. For example: <pre>export default async function MyComponent() { const data = await fetch(...); return <div>{data}</div>; }</pre>
Click to reveal answer
intermediate
Can async server components use React hooks like useState or useEffect?
No, async server components run only on the server and do not support client-only hooks like useState or useEffect. Those hooks belong in client components.
Click to reveal answer
beginner
What happens if you try to fetch data inside a client component instead of an async server component?
Fetching data inside a client component happens after the page loads, causing loading states and slower content display. Async server components fetch data before sending HTML, improving user experience.
Click to reveal answer
What keyword do you use to define an async server component in Next.js?
Aasync function
Bclass
CuseEffect
Drender
Where do async server components run?
AOnly during build time
BIn the browser
CBoth server and browser
DOn the server
Which React hook is NOT allowed in async server components?
AuseContext
BuseState
CuseCallback
DuseMemo
What is a main benefit of async server components?
AMore client-side JavaScript
BSupports all React hooks
CFaster page load with pre-fetched data
DRuns only in the browser
How do async server components improve SEO?
ABy sending fully rendered HTML to crawlers
BBy hiding content behind JavaScript
CBy delaying rendering until client loads
DBy using client-side routing only
Explain how async server components work in Next.js and why they improve performance.
Think about where the data fetching happens and what the client receives.
You got /5 concepts.
    Describe the difference between async server components and client components in Next.js.
    Consider when and where code runs and how it affects the page.
    You got /5 concepts.

      Practice

      (1/5)
      1. What is the main benefit of using async server components in Next.js?
      easy
      A. They enable real-time updates without refreshing the page.
      B. They allow client-side state management inside the component.
      C. They automatically cache data on the client device.
      D. They fetch data before rendering, sending ready HTML to the browser.

      Solution

      1. Step 1: Understand async server components purpose

        Async server components fetch data on the server before rendering the page.
      2. Step 2: Identify the benefit of pre-fetching data

        This means the browser receives fully rendered HTML, improving speed and user experience.
      3. Final Answer:

        They fetch data before rendering, sending ready HTML to the browser. -> Option D
      4. Quick Check:

        Async server components = fetch data first [OK]
      Hint: Async server components fetch data before rendering [OK]
      Common Mistakes:
      • Thinking async components run on the client
      • Confusing caching with async data fetching
      • Assuming real-time updates happen automatically
      2. Which of the following is the correct way to define an async server component in Next.js?
      easy
      A. async function MyComponent() { const data = await fetchData(); return
      {data}
      ; }
      B. function MyComponent() { const data = await fetchData(); return
      {data}
      ; }
      C. const MyComponent = () => { const data = await fetchData(); return
      {data}
      ; }
      D. const MyComponent = async () => { fetchData().then(data =>
      {data}
      ); }

      Solution

      1. Step 1: Identify async function syntax for components

        Next.js requires the component function to be marked async to use await inside.
      2. Step 2: Check each option for correct async usage

        async function MyComponent() { const data = await fetchData(); return
        {data}; } correctly defines an async function and uses await inside. function MyComponent() { const data = await fetchData(); return
        {data}
        ; } misses async keyword. const MyComponent = () => { const data = await fetchData(); return
        {data}
        ; } uses arrow function but misses async. const MyComponent = async () => { fetchData().then(data =>
        {data}
        ); } uses then() but does not return JSX properly.
      3. Final Answer:

        async function MyComponent() { const data = await fetchData(); return <div>{data}</div>; } -> Option A
      4. Quick Check:

        Async keyword + await inside = async function MyComponent() { const data = await fetchData(); return
        {data}
        ; } [OK]
      Hint: Async components must be declared with async keyword [OK]
      Common Mistakes:
      • Forgetting to add async keyword
      • Using await without async function
      • Returning JSX inside then() without return statement
      3. Given this async server component code, what will be rendered?
      async function Greeting() {
        const name = await Promise.resolve('Alice');
        return <h1>Hello, {name}!</h1>;
      }
      medium
      A. <h1>Hello, Alice!</h1>
      B. Hello, {name}!
      C. Promise { 'Alice' }
      D. Error: Cannot use await here

      Solution

      1. Step 1: Understand async function behavior in server components

        The function awaits the resolved promise 'Alice' and stores it in name.
      2. Step 2: Render JSX with awaited value

        The component returns an h1 element with the text 'Hello, Alice!'. This HTML is sent to the browser.
      3. Final Answer:

        <h1>Hello, Alice!</h1> -> Option A
      4. Quick Check:

        Await resolves promise, renders value [OK]
      Hint: Await resolves promise before rendering JSX [OK]
      Common Mistakes:
      • Thinking JSX shows variable name literally
      • Expecting promise object to render
      • Assuming await is disallowed in server components
      4. What is wrong with this async server component code?
      async function UserProfile() {
        const user = fetch('/api/user');
        return <div>{user.name}</div>;
      }
      medium
      A. Cannot use fetch inside server components.
      B. Missing await before fetch call, so user is a promise, not data.
      C. JSX cannot contain expressions like {user.name}.
      D. Function should not be async if it returns JSX.

      Solution

      1. Step 1: Check fetch usage in async function

        fetch returns a promise, so it must be awaited to get the data.
      2. Step 2: Identify the error in accessing user.name

        Without await, user is a promise object, so user.name is undefined causing error.
      3. Final Answer:

        Missing await before fetch call, so user is a promise, not data. -> Option B
      4. Quick Check:

        Always await fetch to get data [OK]
      Hint: Always await fetch to get resolved data [OK]
      Common Mistakes:
      • Forgetting await before fetch
      • Thinking fetch is disallowed in server components
      • Misunderstanding JSX expressions
      5. You want to fetch user data and posts in an async server component and render them together. Which code correctly fetches both before rendering?
      async function Dashboard() {
        const user = await fetch('/api/user').then(res => res.json());
        const posts = fetch('/api/posts').then(res => res.json());
        return (
          <div>
            <h1>{user.name}</h1>
            <ul>{posts.map(post => <li key={post.id}>{post.title}</li>)}
      hard
      A. Use then() only without await for both fetches.
      B. Remove await before fetch('/api/user') to run both fetches in parallel.
      C. Add await before fetch('/api/posts') to wait for posts data.
      D. Return JSX before fetching posts to speed up rendering.

      Solution

      1. Step 1: Identify missing await for posts fetch

        The posts fetch is missing await, so posts is a promise, not data.
      2. Step 2: Fix by adding await to posts fetch

        Adding await ensures posts data is ready before rendering the list.
      3. Final Answer:

        Add await before fetch('/api/posts') to wait for posts data. -> Option C
      4. Quick Check:

        Await all fetches before rendering [OK]
      Hint: Await all fetches before using their data [OK]
      Common Mistakes:
      • Forgetting await on second fetch
      • Removing await on first fetch causing errors
      • Returning JSX before data is ready
      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