useAsyncData — blocks navigation. useLazyAsyncData — no blocking.
useAsyncData:
1<script setup>2// Blocks until resolved3const { data } = await useAsyncData("posts", () => {4 return $fetch("/api/posts")5})6</script>
useLazyAsyncData:
1<script setup>2// Does NOT block3const { data, pending } = useLazyAsyncData("posts", () => {4 return $fetch("/api/posts")5})6</script>78<template>9 <div v-if="pending">Loading...</div>10 <div v-else>{{ data }}</div>11</template>
When to use: