defineUseAsyncDataAddon v4.6

定义可复用的 addon,以扩展通过 createUseAsyncData 创建的组合式函数。

Maschinelle Übersetzung ·0 % geprüft

defineUseAsyncDataAddon 用于为 createUseAsyncData 创建的 useAsyncData 组合式函数定义可复用扩展。

Addon 可以声明调用时的自定义选项、使用中间件包装 handler、附加自定义响应式逻辑,或扩展返回对象。

Weitere Informationen findest du unter defineUseFetchAddon:useAsyncData 的 addon 与 useFetch 的 addon 用法相同.

用法

例如,下面的 addon 添加 pollEvery 选项,按指定间隔刷新数据:

app/composables/usePolledAsyncData.ts
const polling = defineUseAsyncDataAddon({
  setup: (options: UseAsyncDataAddonOptions<{ pollEvery?: number }>) => {
    if (import.meta.server || !options.pollEvery) { return }
    return (asyncData) => {
      const interval = setInterval(() => asyncData.refresh(), options.pollEvery)
      onScopeDispose(() => clearInterval(interval))
    }
  },
})

export const usePolledAsyncData = createUseAsyncData({ addons: [polling] })
app/pages/index.vue
<script setup lang="ts">
// 每 30 秒刷新一次数据
const { data } = await usePolledAsyncData(
  'mountains',
  () => $fetch('https://api.nuxtjs.dev/mountains'),
  { pollEvery: 30_000 },
)
</script>
Addon 按 addons 数组中的顺序运行,第一个 addon 的中间件位于最外层。同一个 addon 对象即使列出多次也只会运行一次。

类型

Signatur
function defineUseAsyncDataAddon<Opts extends Record<string, any> = {}, Ext = {}> (addon: {
  setup: (options: UseAsyncDataAddonOptions<Opts>) => ((asyncData: AsyncDataAddonInstance) => Ext | void) | void
}): UseAsyncDataAddon<Opts, Ext>