在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已经初始化完成再创建,也可避免报错