createUseAsyncData

Source
一个工厂函数,用于创建带有预定义默认选项的自定义 useAsyncData 可组合项。

createUseAsyncData 会创建一个带有预定义选项的自定义 useAsyncData 可组合项。生成的可组合项具有完整的类型,并且与 useAsyncData 的工作方式完全一致,只是把你的默认值“烘焙”进去了。

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

Usage

app/composables/useCachedData.ts
export const useCachedData = createUseAsyncData({
  getCachedData (key, nuxtApp) {
    return nuxtApp.payload.data[key] ?? nuxtApp.static.data[key]
  },
})
app/pages/index.vue
<script setup lang="ts">
const { data: mountains } = await useCachedData(
  'mountains',
  () => $fetch('https://api.nuxtjs.dev/mountains'),
)
</script>

生成的可组合项具有与 useAsyncData 相同的签名和返回类型,并且所有选项都可供调用者使用或覆盖。

Type

Signature
function createUseAsyncData (
  options?: Partial<AsyncDataOptions>,
): typeof useAsyncData

function createUseAsyncData (
  options: (callerOptions: AsyncDataOptions) => Partial<AsyncDataOptions>,
): typeof useAsyncData

Options

createUseAsyncData 接受与 useAsyncData 相同的所有选项,包括 serverlazyimmediatedefaulttransformpickgetCachedDatadeepdedupetimeoutwatch

请在 useAsyncData 文档 中查看完整的选项列表。

Default vs Override Mode

Default Mode(纯对象)

当你传入一个纯对象时,工厂选项充当默认值。调用者可以覆盖任意选项:

app/composables/useLazyData.ts
export const useLazyData = createUseAsyncData({
  lazy: true,
  server: false,
})
// 使用默认值(lazy: true, server: false)
const { data } = await useLazyData('key', () => fetchSomeData())

// 调用者将 server 覆盖为 true
const { data } = await useLazyData('key', () => fetchSomeData(), { server: true })

Override Mode(函数)

当你传入一个函数时,工厂选项会覆盖调用者的选项。该函数会接收调用者的选项作为参数:

app/composables/useStrictData.ts
// deep 永远被强制为 false
export const useStrictData = createUseAsyncData(callerOptions => ({
  deep: false,
}))
Docs > 4 X > Guide > Recipes > Custom Usefetch 中查看详情
Docs > 4 X > API > Composables > Use Async Data 中查看详情