0
0
NextJSframework~20 mins

Streaming with Suspense in NextJS - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Streaming Suspense Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
component_behavior
intermediate
2:00remaining
What is the output of this streaming Suspense component?

Consider this Next.js component using Suspense and streaming. What will the user see first when this component renders?

NextJS
import React, { Suspense } from 'react';

function SlowComponent() {
  const data = new Promise(resolve => setTimeout(() => resolve('Loaded Data'), 3000));
  const text = React.use(data);
  return <div>{text}</div>;
}

export default function Page() {
  return (
    <Suspense fallback={<div>Loading...</div>}>
      <SlowComponent />
    </Suspense>
  );
}
AThe user sees 'Loading...' immediately, then after 3 seconds sees 'Loaded Data'.
BThe user sees 'Loaded Data' immediately without delay.
CThe user sees a blank page for 3 seconds, then 'Loaded Data' appears.
DThe user sees an error because Suspense cannot be used with promises.
Attempts:
2 left
💡 Hint

Think about what Suspense does when waiting for data.

state_output
intermediate
2:00remaining
What is the final rendered output after streaming completes?

Given this Next.js streaming Suspense example, what is the final rendered HTML content?

NextJS
import React, { Suspense } from 'react';

function Data() {
  const promise = new Promise(resolve => setTimeout(() => resolve('Hello from server'), 2000));
  const message = React.use(promise);
  return <p>{message}</p>;
}

export default function Page() {
  return (
    <Suspense fallback={<p>Loading message...</p>}>
      <Data />
    </Suspense>
  );
}
A<p>Hello from server</p> immediately
B<p>Loading message...</p> followed by <p>Hello from server</p>
C<p>Loading message...</p> only, never replaced
DAn error is thrown because React.use cannot be used with promises
Attempts:
2 left
💡 Hint

Remember how Suspense fallback works with async data.

🔧 Debug
advanced
2:00remaining
Why does this streaming Suspense component cause a runtime error?

Examine this Next.js component using Suspense and streaming. Why does it cause a runtime error?

NextJS
import React, { Suspense } from 'react';

function BrokenComponent() {
  const data = fetch('/api/data').then(res => res.json());
  const result = React.use(data);
  return <div>{result.value}</div>;
}

export default function Page() {
  return (
    <Suspense fallback={<div>Loading...</div>}>
      <BrokenComponent />
    </Suspense>
  );
}
AReact.use cannot be used with promises returned by fetch directly.
BThe Suspense fallback is missing, causing the error.
CThe fetch call is not awaited, so result is undefined.
DThe component is missing a key prop inside Suspense.
Attempts:
2 left
💡 Hint

Consider how React.use works with promises and what it expects.

🧠 Conceptual
advanced
2:00remaining
Which statement about streaming with Suspense in Next.js is true?

Choose the correct statement about how streaming with Suspense works in Next.js.

AStreaming with Suspense only works on client-side rendering, not server-side.
BStreaming with Suspense disables fallback UI rendering.
CStreaming with Suspense requires disabling React Server Components.
DStreaming with Suspense allows parts of the UI to render immediately while waiting for async data in other parts.
Attempts:
2 left
💡 Hint

Think about how Suspense helps with loading states and partial rendering.

📝 Syntax
expert
3:00remaining
Which option correctly implements streaming Suspense with async server component in Next.js?

Identify the correct code snippet that uses streaming Suspense with an async server component in Next.js 14+.

A
export default async function Page() {
  const data = await fetch('https://api.example.com/data').then(res =&gt; res.json());
  return &lt;div&gt;{data.message}&lt;/div&gt;;
}
B
import { Suspense } from 'react';

async function Data() {
  const data = fetch('https://api.example.com/data').then(res =&gt; res.json());
  return &lt;p&gt;{data.message}&lt;/p&gt;;
}

export default function Page() {
  return (
    &lt;Suspense fallback={&lt;p&gt;Loading...&lt;/p&gt;}&gt;
      &lt;Data /&gt;
    &lt;/Suspense&gt;
  );
}
C
import { Suspense } from 'react';

async function Data() {
  const data = await fetch('https://api.example.com/data').then(res =&gt; res.json());
  return &lt;p&gt;{data.message}&lt;/p&gt;;
}

export default function Page() {
  return (
    &lt;Suspense fallback={&lt;p&gt;Loading...&lt;/p&gt;}&gt;
      &lt;Data /&gt;
    &lt;/Suspense&gt;
  );
}
D
import { Suspense } from 'react';

function Data() {
  const data = fetch('https://api.example.com/data').then(res =&gt; res.json());
  const message = React.use(data);
  return &lt;p&gt;{message}&lt;/p&gt;;
}

export default function Page() {
  return (
    &lt;Suspense fallback={&lt;p&gt;Loading...&lt;/p&gt;}&gt;
      &lt;Data /&gt;
    &lt;/Suspense&gt;
  );
}
Attempts:
2 left
💡 Hint

Remember async components must be awaited and Suspense fallback is required for streaming.