通过 100 多个技巧学习 Nuxt!

旧版 Composition API

了解如何使用 Nuxt Bridge 迁移到 Composition API。

Nuxt Bridge 提供了对 Composition API 语法的访问。它专门设计为与 Nuxt 3 对齐。因此,如果您之前一直在使用 Composition API,那么在启用 Nuxt Bridge 时需要采取一些额外的步骤。

删除模块

  • 从您的依赖项中删除 @vue/composition-api
  • 从您的依赖项中删除 @nuxtjs/composition-api(以及从您的 nuxt.config 中的模块中删除)。

使用 @vue/composition-api

如果您只使用 @vue/composition-api 而不使用 @nuxtjs/composition-api,那么事情就非常简单了。

  1. 首先,删除您手动注册 Composition API 的插件。Nuxt Bridge 会为您处理此问题。
    - import Vue from 'vue'
    - import VueCompositionApi from '@vue/composition-api'
    -
    - Vue.use(VueCompositionApi)
    
  2. 否则,您无需执行任何操作。但是,如果您愿意,可以从 @vue/composition-api 中删除显式导入,并依赖 Nuxt Bridge 为您自动导入它们。

@nuxtjs/composition-api 迁移

Nuxt Bridge 实现 Composition API 的方式与 @nuxtjs/composition-api 略有不同,并提供不同的组合式函数(旨在与 Nuxt 3 提供的组合式函数对齐)。

由于某些组合式函数已被删除并且尚未有替代品,因此这将是一个稍微复杂的过程。

从您的 buildModules 中删除 @nuxtjs/composition-api/module

您不必立即更新您的导入 - Nuxt Bridge 会自动为您当前的大多数导入提供“垫片”,以便让您有时间迁移到新的、与 Nuxt 3 兼容的组合式函数,但以下情况除外

  • withContext 已被删除。请参阅下方
  • useStatic 已被删除。目前没有替代品。如果您有此用例,请随时发起讨论。
  • 已弃用的 reqRefreqSsrRef 已被完全删除。请按照以下关于 ssrRef 的说明进行替换。

设置 bridge.capi

import { defineNuxtConfig } from '@nuxt/bridge'

export default defineNuxtConfig({
  bridge: {
    capi: true,
    nitro: false // If migration to Nitro is complete, set to true
  }
})

对于您正在使用的来自 @nuxtjs/composition-api 的其他每个组合式函数,请按照以下步骤操作。

useFetch

$fetchState$fetch 已被删除。

const {
- $fetch,
- $fetchState,
+ fetch,
+ fetchState,
} = useFetch(() => { posts.value = await $fetch('/api/posts') })

defineNuxtMiddleware

这是一个类型助手存根函数,现在已被删除。

删除 defineNuxtMiddleware 包装器

- import { defineNuxtMiddleware } from '@nuxtjs/composition-api`
- export default defineNuxtMiddleware((ctx) => {})
+ export default (ctx) => {}

对于 TypeScript 支持,您可以使用 @nuxt/types

import type { Middleware } from '@nuxt/types'

export default <Middleware> function (ctx) { }

defineNuxtPlugin

这是一个类型助手存根函数,现在已被删除。

您也可以通过删除函数来继续使用 Nuxt 2 样式的插件(如 defineNuxtMiddleware)。

删除 defineNuxtPlugin 包装器

- import { defineNuxtPlugin } from '@nuxtjs/composition-api'
- export default defineNuxtPlugin((ctx, inject) => {})
+ export default (ctx, inject) => {}

对于 TypeScript 支持,您可以使用 @nuxt/types

import type { Plugin } from '@nuxt/types'

export default <Plugin> function (ctx, inject) {}
虽然此示例有效,但 Nuxt 3 引入了一个新的 defineNuxtPlugin 函数,该函数具有略有不同的签名。
请在缺少链接中阅读更多内容。

useRouteruseRoute

Nuxt Bridge 通过 useRouteruseRoute 为这些组合式函数提供了直接替换。

唯一的关键区别在于 useRoute 不再返回计算属性。

- import { useRouter, useRoute } from '@nuxtjs/composition-api'

  const router = useRouter()
  const route = useRoute()

- console.log(route.value.path)
+ console.log(route.path)