nuxt3 需要访问 Nuxt 实例的可组合项在插件、Nuxt 钩子、Nuxt 中间件或 Vue 设置函数之外被调用

问题描述 投票:0回答:1

我从 nuxt 3 开始,我正在开发一个项目,在该项目中,我们将 useFetch 集中在我们决定放置的可组合项中

const config = useRuntimeConfig();

使用环境变量,但出现以下错误

[nuxt] 需要访问 Nuxt 实例的可组合项在插件、Nuxt 钩子、Nuxt 中间件或 Vue 设置函数之外被调用

当从 pinia 商店调用可组合项时

这是可组合项的代码

import { UseFetchOptions } from "nuxt/app";
const config = useRuntimeConfig();
export function useApiFetch<T>(path: string, options: UseFetchOptions<T> = {}) {
 return useFetch(config.public.BASE_API_URL + path,{
    ...options,
  });
}

以我们使用它的地方为例

export const useAuthStore = defineStore("auth", () => {
  const user = ref<User | null>(null);
  const isLoggedIn = computed(() => !!user.value);
  async function logout() {
    await useApiFetch("/logout", { method: "POST" });
    user.value = null;
    token.value = null;
    navigateTo("/auth");
  }
vue.js nuxt.js vuejs3 nuxtjs3
1个回答
0
投票

useFetch
是一个可组合函数,不能直接替代
fetch
函数。可组合项应该在组件设置的主体中使用,任何其他用法都需要符合。

useFetch
应在创建商店时调用一次,并且该对象需要在整个商店中重用:

defineStore("auth", () => {
  const logoutFetch = useApiFetch("/logout", { method: "POST", immediate: false });
  ...
  async function logout() {
    await logoutFetch.execute();
    ...

这对

auth
商店的使用进行了限制,仅限于 Nuxt 可组合项允许的地方:

useFetch 是一个可组合项,可以在设置函数、插件或路由中间件中直接调用。

© www.soinside.com 2019 - 2024. All rights reserved.