【Pinia】 was called but there was no active Pinia. Did you forget to install pinia | pinia报错

Pinia版本号

"pinia": "^2.0.34"


报错图

在这里插入图片描述

报错原因

  • 在注册Pinia之前就访问pinia实例,导致报错。就像车还没有启动就去开车,根本***开不走***呀!

pinia例子

pinia已在main.js中注册,和官网一样(不再贴代码)

定义pinia实例↓

src/store/userInfo.js

import { defineStore } from 'pinia'

const useUserInfoStore = defineStore('userInfo', {
    state: () => {
        return {
            userName: null,
            logined: false,//是否登录
            uid: null,
            jianjie: null,
            auth: null,//登录的token授权
            showLoginForm: false,//显示登录/注册表单
            musicPlayMode: 0,//音乐播放模式 0 列表播放 | 1 单曲循环 | 2 随机
        }
    },
    persist: {
        key: 'userInfo',
        paths: ['userName', 'auth', 'uid', 'logined', 'showLoginForm', 'musicPlayMode'],

    },

    actions: {
        setShowLoginForm() {
            this.showLoginForm = !this.showLoginForm
        }
    }
})


export default useUserInfoStore

解决问题

分2种情况

第一种情况 ,在vue文件中使用pinia实例

如下例子,可以正常使用,没有问题

views/Home.vue

<template>

</template>

<script setup>
// 导入pinia实例
import useUserInfoStore from '@/stores/userInfo'
//使用pinia实例
const userInfoStore = useUserInfoStore()
console.log(userInfoStore)
</script> 

第二种情况 ,在js/ts文件中使用pinia实例

  • 例如我在 src/common/test.js 中使用Pinia,做一个点击登录按钮,且登录成功并将token保存到本地的例子
  • 假如已经登录成功,且后端已返回token
错误的用法
  • 一定会报错,因为在加载该js文件时,可能pinia都还没有注册就使用Pinia
  • 重点第 4 行代码

src/common/test.js

// 导入pinia实例
import useUserInfoStore from '@/stores/userInfo'
//使用pinia实例
const userInfoStore = useUserInfoStore()
console.log(userInfoStore)

//登录按钮的click事件
const loogin = ev =>{
	// 假如这里有很多js代码 ..................
	
	const token = '后端返回的toen'
	// 登录成功,开始接收后端返回的toekn
	userInfoStore.auth.value=  token 
}
正确的用法

src/common/test.js

// 导入pinia实例
import useUserInfoStore from '@/stores/userInfo'

//登录按钮的click事件
const loogin = ev =>{
	// 假如这里有很多js代码 ..................
	
	//这里才开始使用pinia实例,因为在这里pinia已经完全初始化
	const userInfoStore = useUserInfoStore()
	console.log(userInfoStore) 
	
	const token = '后端返回的toen'
	// 登录成功,开始接收后端返回的toekn
	 userInfoStore.auth.value=  token 
}

正确用法 vs 错误用法小结
  • vue文件中可以直接使用pinia
  • js/ts文件中,要在处理业务时才使用pinia,例如点击一个按钮的click事件里使用pinia实例.
    • 直接在js/ts文件顶部使用pinia时,在加载该js/ts时,pinia还没有注册完成就使用pinia会肯定报错
    • 所以js/ts文件里使用pinia实例时,必须在处理业务时使用,比如按钮的click事件里

其实官网说的很清楚
官网链接 - https://pinia.web3doc.top/core-concepts/outside-component-usage.html#%E5%8D%95%E9%A1%B5%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F, 如图

在这里插入图片描述

总结

使用第三方库有问题先去官网找解决方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值