我有一个PostHog的插件。在这个插件中,我想初始化我的Pinia存储,所以我可以使用存储数据。我的问题是插件在我的商店加载之前加载,所以我收到了一个嵌套对象的代理。
我如何从这个代理中提取我需要的数据,以便我可以在我的插件中使用它?或者,我如何确保在插件初始化之前,我的存储中已经充满了数据?
我尝试了JSON.stringify
、JSON.parse
和...userStore.activeUser
的所有可能组合,但总是得到空结果。
这是我的JSON对象,当我字符串化它。
{
"$id":"user",
"activeUser":null
}
我正在尝试访问activeUser.actieveBasisgroep
。activeUser
应该填写下面的代码。
{
"user":"123",
"actieveBasisgroep":{
"id":"dde240a0-e5bb-459a-abde-6ca708861d87"
}
}
插件看起来像这样:
export default defineNuxtPlugin(async (nuxtApp) => {
const userStore = useUserStore();
console.log(JSON.stringify({ ...userStore }));
console.log(toRaw({ ...userStore.activeUser }));
if (toRaw({ ...userStore.activeUser }).actieveBasisgroep) {
console.log('nope');
}
return '';
});
我的商店是这样的:
export const useUserStore = defineStore('user', {
state: () => {
return {
activeUser: null as null | ActiveUser,
};
},
// Setters, getters, actions ...
1条答案
按热度按时间7vux5j2d1#
这是因为Pinia在Vue中没有被激活,因为Vue本身还没有准备好,它来自使用Pinia(
app.use(pinia)
)的Vue示例,您的商店会自动查找Pinia的顶级示例,在这种情况下,您必须手动让商店知道要使用哪个Pinia示例。要在Vue完全初始化之前使用Pinia,或者例如在路由器导航守卫(Vue示例范围之外的任何东西)中使用Pinia,您需要将顶级共享示例传递给store,与您给Vue的示例相同。
你可以通过将Pinia示例分配到一个全局作用域(如
window.Pinia = createPinia()
和useUserStore(window.Pinia)
)来实现这一点,或者使用一些基于总线的实践,我更喜欢使用简单的JS原生模块方法: