Nuxt3中间件使用Pinia报错:未找到活跃Pinia实例
解决Nuxt3路由中间件中Pinia未激活的错误
错误原因
出现getActivePinia() was called but there was no active Pinia错误,核心原因有两点:
- 路由中间件调用Pinia store时,Pinia实例尚未完成初始化挂载
- 使用
storeToRefs获取的响应式状态是ref对象,直接判断时未访问.value属性
解决方案
1. 确认Pinia在Nuxt3中的基础配置
先确保已安装@pinia/nuxt并在nuxt.config.ts中完成配置:
export default defineNuxtConfig({ modules: ['@pinia/nuxt'], })
2. 修改路由中间件代码
显式通过useNuxtApp()获取已挂载的Pinia实例,并正确访问ref状态的.value属性:
import { abortNavigation, defineNuxtRouteMiddleware, navigateTo, useNuxtApp, } from "nuxt/app"; import { storeToRefs } from "pinia"; import { useAuthStore } from "~/store/authStore"; export default defineNuxtRouteMiddleware((to) => { // 传入Nuxt App中已初始化的Pinia实例 const authStore = useAuthStore(useNuxtApp().$pinia); const { isAuthenticated } = storeToRefs(authStore); // 访问ref的.value属性进行逻辑判断 if (isAuthenticated.value && to?.name === "login") { return navigateTo("/"); } if (!isAuthenticated.value && to?.name !== "login") { abortNavigation(); return navigateTo("/login"); } });
关键说明
useNuxtApp().$pinia能确保获取到已完成挂载的Pinia实例,避免store找不到活跃上下文的问题storeToRefs提取的状态是响应式ref对象,必须通过.value访问实际值,否则判断逻辑会失效
内容的提问来源于stack exchange,提问作者Nikodem Wicon - Nicode.pl
相关产品推荐
相关产品推荐

