Loading video...

Video Failed to Load

Go Home

A navigation to a dynamic server-rendered page is blocked until the server responds. In Next.js, the first step to improving the experience is to add a `loading.js` file. This unblocks navigation and gives the user feedback while the content streams in.

50,434 views • 1 year ago •via X (Twitter)

10 Comments

Delba's profile picture
Delba1 year ago

Docs · Is `loading.js` the same as a `<Suspense>` boundary? Not quite. `loading.js` becomes the fallback UI of a Suspense boundary, but because it is a convention, it can be rendered and prefetched ahead of time. Regular Suspense boundaries need a server round-trip to render their fallback. So, are suspense boundaries bad? No. You can use Suspense deeper in a Page to break up rendering into smaller chunks and stream them as they become available. Since the page is already rendering on the server at that point, no additional round-trip is needed. What about static pages? Pages rendered at build time don't need a `loading.js` file because all their content is already available and can be prefetched when <Link>'d to.

Alex Sidorenko's profile picture
Alex Sidorenko1 year ago

delba-remotion-framework when?

Delba's profile picture
Delba1 year ago

when the repo isn't this

Coding in Flow's profile picture
Coding in Flow1 year ago

Except when you click a link and it takes a second before loading.ts shows up 😆

Umar's profile picture
Umar1 year ago

Nextjs sucks waiting for tanstack start stable

Abd Sattout's profile picture
Abd Sattout1 year ago

Another nice video as always, Delba 🤍🔥

Delba's profile picture
Delba1 year ago

🤍

Carlos Acosta's profile picture
Carlos Acosta1 year ago

Is adding a 'loading.tsx' a good approach even if you're using SSR?

Christopher's profile picture
Christopher1 year ago

Suspense looks so much better than the loading.tsx file

Delba's profile picture
Delba1 year ago

Do you mean at the 29s mark? That is using both, loading.js for the form and suspense for inventory and orders. * there is a code mistake here, I should have split the promise.all into separate promises, which are then passed down.

Related Videos