PLAY PODCASTS
How far can nested UI loaders go for UIs with list of components
Season 5 · Episode 15

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

Marco asked this on 2025-09-12

The Call Kent Podcast

September 13, 20257m 37s

Audio is streamed directly from the publisher (media.transistor.fm) as published in their RSS feed. Play Podcasts does not host this file. Rights-holders can request removal through the copyright & takedown page.

Show Notes

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.

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

Topics

OutletDeeplinkingnested routeslayoutpatterns