The Call Kent Podcast

How far can nested UI loaders go for UIs with list of components


Listen Later

the UI at https://nothing.tech/products/phone-3 renders a list of "widgets". I would like each of these widgets to have their own loaders to maximise page speed, furthermore I'd be able to "deeplink" a user straight into a widget. But how do I do that when a route can only have one Outlet?

Here's an example with Promise.all. Before:

// routes/dashboard.tsx
export async function loader() {
const user = await fetch('/api/user').then(r => r.json())
const projects = await fetch(`/api/projects?userId=${user.id}`).then(r => r.json())
const notifications = await fetch(`/api/notifications?userId=${user.id}`).then(r => r.json())
return { user, projects, notifications }
}

After:

export async function loader() {
const userPromise = fetch('/api/user').then(r => r.json())
const projectsPromise = userPromise.then(user =>
fetch(`/api/projects?userId=${user.id}`).then(r => r.json())
)
const notificationsPromise = userPromise.then(user =>
fetch(`/api/notifications?userId=${user.id}`).then(r => r.json())
)
const [user, projects, notifications] = await Promise.all([
userPromise,
projectsPromise,
notificationsPromise,
])
return { user, projects, notifications }
}

Kent's notes:

I forgot that defer is now unnecessary, simply return an object from your loader and any properties on that object that are promises will be sent along as deferred data automatically. Learn more from the links below.

  • Full Stack Components
  • Streaming with Suspense
  • React Router and React Server Components: The Path Forward
  • promiseHash from remix-utils
  • How far can nested UI loaders go for UIs with list of components
    ...more
    View all episodesView all episodes
    Download on the App Store

    The Call Kent PodcastBy Kent C. Dodds

    • 5
    • 5
    • 5
    • 5
    • 5

    5

    2 ratings


    More shows like The Call Kent Podcast

    View all
    The Changelog: Software Development, Open Source by Changelog Media

    The Changelog: Software Development, Open Source

    288 Listeners

    Syntax - Tasty Web Development Treats by Wes Bos & Scott Tolinski - Full Stack JavaScript Web Developers

    Syntax - Tasty Web Development Treats

    990 Listeners

    PodRocket by LogRocket

    PodRocket

    60 Listeners