Vue 3 Suspense and Async Components in Practice
Suspense lets you handle async setup() functions and async components with a single fallback boundary. Here's how to use it without overcomplicating things.
Vue 3's <Suspense> component is still considered experimental, but it is stable enough that I use it in production for one specific pattern: components that need to fetch data during setup() before they can render.
Why this matters
Without Suspense, every component fetches its own data, manages its own loading state, and renders its own spinner. That is fine for one component but tedious when several siblings all wait on different fetches. Suspense gives you one fallback for an entire subtree.
How it looks
html<template>
<Suspense>
<template #default>
<UserDashboard />
</template>
<template #fallback>
<div>Loading dashboard…</div>
</template>
</Suspense>
</template>Inside UserDashboard, the setup() function can be async and fetch data directly. Suspense waits for the async setup to resolve, then renders the default slot. Until then, it shows the fallback.
Where it shines
Pages that aggregate data from several places — a user profile that needs the user, their recent activity, and their saved items — benefit. Each child component fetches its own piece, Suspense waits for all of them, and the user sees one loading state instead of three staggered spinners.
Where to keep regular fetching
If a component takes user input and fetches in response (search, filters), Suspense is the wrong tool. The component is interactive — it should manage its own loading state, not block render until the fetch finishes. Reach for Suspense only when initial render needs to wait.
About the author

Richard Gamora
Fullstack developer based in the Philippines, working mostly with Laravel and Vue.js, with eight years of production experience across web and mobile.
More on Vue & Nuxt
January 28, 2026
Vue 3 Composition API: Patterns That Scale
The Composition API is more flexible than the Options API but easier to misuse. Here are the patterns that hold up as components grow.
January 21, 2026
Migrating from Vuex to Pinia: A Practical Guide
Pinia is now the recommended state library for Vue 3. Here's how to migrate from Vuex incrementally without breaking working code.
January 14, 2026
Nuxt 3 SSR vs SSG: How to Decide for Your Site
Nuxt 3 supports server rendering, static generation, and hybrid modes per route. Here's a clear way to choose for content sites, SaaS apps, and marketing pages.