Nuxt.js 数据获取与组合式 API
在这篇教程中,你将学习如何在 Nuxt.js 中使用组合式 API 获取数据。我们会介绍 Nuxt 提供的专属数据获取函数,比如 useFetch
和 useAsyncData
,并带你理解它们和 Vue 的组合式 API(Composition API)是如何协同工作的。 通过实际示例,你可以掌握如何在页面加载时从远程 API 拉取数据,并在组件中高效地响应式使用这些数据。
什么是组合式 API?
组合式 API(Composition API)是 Vue 3 引入的一种新的组件编写方式。相比于传统的 Options API(data
, methods
, computed
等分开写),组合式 API 更加灵活,适合模块化和重用逻辑。
你可以在组件中使用 setup()
函数,通过 ref
, reactive
, computed
等工具函数来管理状态和逻辑。
<script setup lang="ts">
import { ref } from 'vue'
const count = ref(0)
const increment = () => count.value++
</script>
Nuxt 中的数据获取方式
在 Nuxt 3 中,获取远程数据有两个核心工具函数:
useFetch
:推荐用于页面组件(Page Components),能自动处理服务端渲染、缓存等。useAsyncData
:功能更通用,可用于组件中任意地方,适合更复杂的数据处理需求。
使用 useFetch
获取页面数据
如果你在页面组件中需要获取外部 API 的数据,推荐使用 useFetch
。这个函数默认支持 SSR,你不需要手动判断当前是客户端还是服务端。
<template>
<div>
<h1>用户列表</h1>
<ul>
<li v-for="user in data" :key="user.id">{{ user.name }}</li>
</ul>
</div>
</template>
<script setup lang="ts">
const { data, pending, error } = await useFetch('https://jsonplaceholder.typicode.com/users')
</script>
说明:
data
是一个ref
,包含响应数据。pending
是加载状态。error
是请求出错时的错误对象。await
是可选的,你也可以不加,只不过要手动处理pending
状态。