createUseFetch

源文件
一个用于创建具有预定义默认选项的自定义 useFetch 可组合函数(composable)的工厂函数。

createUseFetch 用于创建一个带有预定义选项的自定义 useFetch 可组合函数。生成的函数具备完整的类型支持,其工作方式与 useFetch 完全一致,但内置了你所预设的默认值。

createUseFetch 是一个编译器宏。它必须在 composables/ 目录(或任何被 Nuxt 编译器扫描的目录)中作为导出(exported)声明使用。Nuxt 会在构建时自动注入去重键(de-duplication keys)。

使用

app/composables/useAPI.ts
export const useAPI = createUseFetch({
  baseURL: 'https://api.nuxt.com',
})
app/pages/modules.vue
<script setup lang="ts">
const { data: modules } = await useAPI('/modules')
</script>

生成的 useAPI 可组合函数与 useFetch 具有相同的签名和返回类型,调用者可以使用或覆盖所有选项。

类型

签名
function createUseFetch (
  options?: Partial<UseFetchOptions>,
): typeof useFetch

function createUseFetch (
  options: (callerOptions: UseFetchOptions) => Partial<UseFetchOptions>,
): typeof useFetch

选项

createUseFetch 接受与 useFetch 完全相同的选项,包括 baseURLheadersqueryonRequestonResponseserverlazytransformgetCachedData 等。

查看完整选项列表,请参阅 useFetch 文档

默认模式与覆盖模式

默认模式(纯对象)

当你传入一个纯对象时,工厂选项将作为默认值。调用者可以覆盖任何选项。

app/composables/useAPI.ts
export const useAPI = createUseFetch({
  baseURL: 'https://api.nuxt.com',
  lazy: true,
})
// Uses the default baseURL
const { data } = await useAPI('/modules')

// Caller overrides the baseURL
const { data } = await useAPI('/modules', { baseURL: 'https://other-api.com' })

覆盖模式(函数)

当你传入一个函数时,工厂选项会强制覆盖调用者的选项。该函数接收调用者的选项作为参数,因此你可以读取它们以计算你的覆盖逻辑。

app/composables/useAPI.ts
// baseURL is always enforced, regardless of what the caller passes
export const useAPI = createUseFetch(callerOptions => ({
  baseURL: 'https://api.nuxt.com',
}))

这对于强制执行诸如身份验证头(Authentication headers)或不允许调用者更改的特定基础 URL(Base URL)等设置非常有用。

结合自定义 $fetch 使用

你可以将自定义的 $fetch 实例传递给 createUseFetch

app/composables/useAPI.ts
export const useAPI = createUseFetch({
  $fetch: useNuxtApp().$api as typeof $fetch,
})
阅读更多:文档 > 4 X > 指南 > 配方 > 自定义 Usefetch
阅读更多:文档 > 4 X > API > Composables > Use Fetch