0
0
NextJSframework~20 mins

Interleaving server and client in NextJS - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Next.js Interleaving Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
component_behavior
intermediate
2:00remaining
What will this Next.js component render?
Consider this Next.js 14 component using server and client code interleaving. What will be the rendered output in the browser?
NextJS
import { cookies } from 'next/headers';

export default function Greeting() {
  const cookieStore = cookies();
  const user = cookieStore.get('user')?.value ?? 'Guest';

  return (
    <main>
      <h1>Hello, {user}!</h1>
      <ClientButton />
    </main>
  );
}

'use client';
import { useState } from 'react';

function ClientButton() {
  const [count, setCount] = useState(0);
  return (
    <button onClick={() => setCount(count + 1)} aria-label="Increment count">
      Clicked {count} times
    </button>
  );
}
A<main><h1>Hello, Guest!</h1><button>Clicked 0 times</button></main>
B<main><h1>Hello, undefined!</h1><button>Clicked 0 times</button></main>
C<main><h1>Hello, !</h1><button>Clicked 0 times</button></main>
D<main><h1>Hello, user!</h1><button>Clicked 0 times</button></main>
Attempts:
2 left
💡 Hint
Remember that cookies() runs on the server and returns cookie values if present, otherwise fallback is used.
state_output
intermediate
1:30remaining
What is the button label after clicking twice?
Given this Next.js client component inside a server component, what will the button label show after clicking it twice?
NextJS
'use client';
import { useState } from 'react';

export default function Counter() {
  const [count, setCount] = useState(0);
  return (
    <button onClick={() => setCount(count + 1)} aria-label="Increment">
      Clicked {count} times
    </button>
  );
}
AClicked 1 times
BClicked 2 times
CClicked 0 times
DClicked NaN times
Attempts:
2 left
💡 Hint
Each click increments the count state by 1.
📝 Syntax
advanced
2:00remaining
Which option correctly imports and uses a client component inside a server component?
In Next.js 14, you want to use a client component named inside a server component. Which code snippet is correct?
A
import ClientWidget from './ClientWidget';

export default function ServerComp() {
  'use client';
  return &lt;ClientWidget /&gt;;
}
B
'use client';
import ClientWidget from './ClientWidget';

export default function ServerComp() {
  return &lt;ClientWidget /&gt;;
}
C
import ClientWidget from './ClientWidget';

export default function ServerComp() {
  return &lt;ClientWidget /&gt;;
}

// ClientWidget has 'use client' directive
D
import ClientWidget from './ClientWidget';

export default function ServerComp() {
  return &lt;ClientWidget /&gt;;
}

// ServerComp has 'use client' directive
Attempts:
2 left
💡 Hint
Server components do not have 'use client' directive. Client components must have it.
🔧 Debug
advanced
2:30remaining
Why does this Next.js component cause a hydration error?
This Next.js component mixes server and client code. Why does it cause a hydration mismatch error in the browser? Code: import { cookies } from 'next/headers'; export default function Page() { const user = cookies().get('user')?.value ?? 'Guest'; return (

Welcome, {user}

); }
AThe component is missing a React key prop on the button, causing hydration error.
BThe cookies() call is invalid in server components, causing runtime error.
CThe button element is missing an aria-label, causing hydration error.
DUsing cookies() in a server component is fine, but the button with onClick requires 'use client' directive, causing mismatch.
Attempts:
2 left
💡 Hint
Client interactivity requires 'use client' directive on the component or a child component.
🧠 Conceptual
expert
2:00remaining
What is the main benefit of interleaving server and client components in Next.js 14?
Next.js 14 allows mixing server and client components in the same UI tree. What is the primary advantage of this approach?
AIt enables faster page loads by rendering static parts on the server and interactive parts on the client efficiently.
BIt forces all components to run on the client, improving interactivity at the cost of performance.
CIt requires all components to be server components, simplifying deployment but reducing interactivity.
DIt disables server-side rendering, making the app fully client-rendered for easier debugging.
Attempts:
2 left
💡 Hint
Think about balancing performance and interactivity in modern web apps.