1. useFetch
useFetch 是一个用于获取数据的高层次工具,结合了 useAsyncData 和 $fetch 的功能,特别适用于需要与 Nuxt 3 的服务器端渲染(SSR)集成的情况。
特点:
- 自动处理状态:
useFetch会自动处理加载状态、错误状态以及数据缓存。 - SSR支持:它默认支持 SSR,并会在服务器端预取数据。
- 返回对象:返回的对象包含
data(响应数据)、pending(加载状态)、error(错误状态)和refresh(用于手动刷新请求)等属性。
使用场景:
适用于大多数页面和组件的数据请求,尤其是需要 SSR 的场景,比如页面初始化时需要从服务器拉取数据。
示例:
<script setup>
const { data, pending, error, refresh } = await useFetch('/api/users')
</script>
2. useAsyncData
useAsyncData 是一个更为通用的异步数据处理工具,可以处理任何类型的异步操作,不仅仅是 HTTP 请求。它是一个更灵活的 API,适合需要复杂异步操作控制的情况。
特点:
- 通用性强:可以处理任何异步操作,不仅限于 HTTP 请求。
- SSR支持:支持 SSR,可以在页面渲染时进行数据预取。
- 更多控制:相较于
useFetch,提供了更多控制选项,例如自定义缓存行为和数据处理。
使用场景:
当你需要更多自定义控制(例如非 HTTP 异步操作,或者需要更复杂的错误处理和缓存逻辑)时,可以使用 useAsyncData。
示例:
<script setup>
const { data, pending, error, refresh } = await useAsyncData(
'users',
() => $fetch('/api/users')
)
</script>
3. $fetch
$fetch 是一个底层 API,封装了浏览器的 fetch,并为它提供了更好的类型支持。它是 Nuxt 3 中用于发起 HTTP 请求的最基础工具。
特点:
- 简单:它是一个基于原生
fetchAPI 的工具,处理的是单一的 HTTP 请求。 - 无SSR和缓存处理:它本身不处理 SSR 或数据缓存,更多的控制交给开发者。
- 返回
Promise:返回的是直接的Promise,不包含加载状态或错误信息。
使用场景:
适用于简单的 HTTP 请求,尤其是在不关心 SSR 或自动缓存的情况下。如果你只需要发起一个请求并拿到数据,而不需要集成到 Nuxt 的渲染流程中,可以使用 $fetch。
示例:
<script setup>
const users = await $fetch('/api/users')
</script>
主要区别总结
| 特性 | useFetch |
useAsyncData |
$fetch |
|---|---|---|---|
| SSR支持 | 支持 | 支持 | 不支持,需手动处理 |
| 自动缓存 | 支持 | 支持 | 不支持 |
| 使用场景 | 页面或组件数据获取,尤其是SSR场景 | 复杂的异步操作,支持SSR,更多控制选项 | 简单的HTTP请求,不关心SSR和缓存 |
| 返回值 | 返回包含 data、pending、error 等状态的对象 |
返回包含 data、pending、error 等状态的对象 |
返回 Promise,仅包含响应数据 |
总结
useFetch:适合大多数常规数据获取场景,特别是需要 SSR 的情况。它封装了数据加载、错误处理和缓存的功能,提供了一个简单的 API。useAsyncData:更灵活且适用于更复杂的异步操作,可以自定义数据处理方式。它可以处理不仅仅是 HTTP 请求的任何异步任务,适用于更有控制需求的场景。$fetch:最基础的请求工具,适用于不需要SSR和自动缓存的简单 HTTP 请求。
选择适合的工具取决于你的项目需求,是否需要 SSR,是否需要控制数据的缓存和刷新,或者只是简单地进行 HTTP 请求。
结论就是$fetch ajax请求,useFetch和useAsyncData都是可以服务端预请求用于服务端首次渲染,客户端渲染好后的请求就会变成异步请求了。
前端工程师、程序员

浙公网安备 33010602011771号