useAsyncData — flexible data fetching. useLazyFetch — no blocking.
useAsyncData:
1<script setup>2// Blocks navigation until resolved3const { data } = await useAsyncData("posts", () => {4 return $fetch("/api/posts")5})6</script>
useLazyFetch:
1<script setup>2// Does NOT block navigation3const { data, pending } = useLazyFetch("/api/posts")4</script>56<template>7 <div v-if="pending">Loading...</div>8 <div v-else>{{ data }}</div>9</template>
When to use: