javascript - nuxt3 how to call pinia store in composeable - Stack Overflow

Since the nuxt 3.4.0update the pinia store can no longer be used in poseables.example posableimpo

Since the nuxt 3.4.0 update the pinia store can no longer be used in poseables.

//example posable
import { useAuthStore } from '~/store/auth-store';
const authStore = useAuthStore();

export function doSomethingWithStore() {
  return authStore.checkAuthUser;
}

you will now receive the below error

getActivePinia was called with no active Pinia. Did you forget to install pinia? const pinia = createPinia() app.use(pinia) This will fail in production.

see stackblitz example .js,nuxt.config.ts

Since the nuxt 3.4.0 update the pinia store can no longer be used in poseables.

//example posable
import { useAuthStore } from '~/store/auth-store';
const authStore = useAuthStore();

export function doSomethingWithStore() {
  return authStore.checkAuthUser;
}

you will now receive the below error

getActivePinia was called with no active Pinia. Did you forget to install pinia? const pinia = createPinia() app.use(pinia) This will fail in production.

see stackblitz example https://stackblitz./edit/broken-pinia-store-in-poseables?file=posables%2FthisBreaks.js,nuxt.config.ts

Share Improve this question asked Apr 21, 2023 at 15:11 Jean-Pierre EngelbrechtJean-Pierre Engelbrecht 2741 gold badge5 silver badges11 bronze badges
Add a ment  | 

3 Answers 3

Reset to default 5

It is because const authStore = useAuthStore(); declared outside any function like you did is called at some early point of application startup and definitely before Pinia instance is properly initialized inside Vue instance.

Like this it will work:

import { useAuthStore } from '~/store/auth-store';

export function doSomethingWithStore() {
  const authStore = useAuthStore();
  return authStore.checkAuthUser;
}

Safe places to do Pinia calls (might not be a plete list):

  • from within <script setup>
  • inline in <template> section
  • inside defineNuxtMiddleware

You wrongly installed the @pinia/nuxt module in nuxt.config.ts. The buildModules property no longer exists in Nuxt 3, you have to use modules instead. (And you can tell by the Typescript error you get):

// nuxt.config.ts
export default defineNuxtConfig({
  // replace buildModules by modules
  modules: ['@pinia/nuxt'],
});

Second point, you also need to call the useAuthStore from within the posable function, otherwise it's trying to load the store before pinia actually loaded. It's gonna get called when the file is imported, not when the posable is used.

import { useAuthStore } from '~/store/auth-store';

export function doSomethingWithStore() {
  const authStore = useAuthStore();
  return authStore.checkAuthUser;
}

See a working stackblitz

If you're new to Nuxt or its dev tools, you may have only installed @pinia/nuxt if you have used the dev tools for installation. It's important to remember that you also need to install pinia itself. In case you overlooked this step, make sure to install both pinia and @pinia/nuxt.

You can do this by running one of the following mands:


pnpm install -D pinia @pinia/nuxt
# or
yarn add -D pinia @pinia/nuxt
# or
npm install -D pinia @pinia/nuxt

link to Pinia docs: https://pinia.vuejs/ssr/nuxt.html#Installation

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1744075164a4554263.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信