Uncaught Error: []: “getActivePinia()“ was called but there was no active Pinia. Are you trying to

在js中使用pinia中store参数,报错内容

在这里插入图片描述

在js中导致报错的使用方式

import { useCustomizeThemeStore } from "@/stores/customize-theme"
const customizeThemeStore = useCustomizeThemeStore()

在这里插入图片描述
这种使用方式在vue页面中是可以的,但是在js或ts文件中,会报错,原因官网有说明
看这里:pinia在组件外使用存储

以下是js中两种类型的解决方式

类型1解决方式(有缺点,谨慎使用)

如果要在页面中直接使用store参数,使用以下方法

import pinia from '@/stores'
import { useCustomizeThemeStore } from "@/stores/customize-theme"
const customizeThemeStore = useCustomizeThemeStore(pinia)

再次引入pinia,初始化时携带pinia,确保使用 customizeThemeStore 之前确保 Pinia 已经被创建和安装。


!!!我发现这个方式有一个致命的缺点,会导致我的缓存插件失效,store中的值能被修改,但是缓存在浏览器本地已经失效,我使用的缓存插件是“pinia-plugin-persistedstate”,不知道是不是插件冲突,或许你使用的是其它缓存插件没有遇到这个问题就最好,我暂时没有找到解决方式,

如果你是在js的函数中要使用,可以使用第二种方式,如果像我一样不想影响缓存插件,又要获取store字段,并且想要直接在定义的时候使用,请直接获取浏览器中存储的数据,多个文件使用可以考虑封装公共方法获取

暂时解决方式,因为我的数据是需要缓存的,发现pinia的这个问题后,我选择直接获取浏览器会话存储中的值,后续如果发现更好的方法会更新,如果你找到了,请留言

function getSessionStorageValue(key) {
  // 检查是否支持sessionStorage API
  if (typeof sessionStorage !== 'undefined') {
    // 尝试从sessionStorage中获取指定key的值
    const value = sessionStorage.getItem(key);

    // 如果值存在,返回该值;否则返回null(或者您希望的默认值)
    return value !== null ? value : null;
  } else {
    console.warn('当前环境不支持sessionStorage API');
    return null;
  }
}
const sessionStorage = getSessionStorageValue('customizeTheme')
const localCode = sessionStorage?.localCode || null   //拿到值了,直接使用

我将getSessionStorageValue封装到公共js文件中了,这样复用起来更方便

在这里插入图片描述


类型2解决方式(官网方式,随意使用)

如果只是在函数中使用store参数,将引入和初始化分开,初始化放到函数中,确保pinia已经初始化完成再创建,也可避免报错

在这里插入图片描述

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值