这两个地方的上下文有什么特别的吗?为什么第一种写法会报错呢。提示:
先说下区别,第二种方法你只是导出了一个 store 的句柄,并没有执行它来获得 store,所以无论你放在哪儿导出都不会报错, 因为根本就没有执行任何逻辑。而第一种是在模块内执行了句柄获取了 store 再导出,也就意味着在你首次导出这个模块的地方,store 就会被初始化
而你截图的报错也很明显,就是你在 app.use(createPinia())
注册 pinia 之前导入了 @/store/popups.js
这个模块
解决方案就是你把 @/store/popups.js
的导入时机放在 app.use(createPinia())
之后就行了
这在 pinia
的官方文档上也有描述(https://pinia.web3doc.top/core-concepts/outside-component-usa...)
3 回答3.3k 阅读✓ 已解决
1 回答2.2k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
2 回答1.8k 阅读✓ 已解决
1 回答2.1k 阅读✓ 已解决
5 回答2k 阅读
2 回答1.1k 阅读✓ 已解决
这一点,和 Pinia 的实现有关。
这一类
useXxx()
都是在setup()
阶段使用的。当你使用 Pinia 时,它需要和对应的组件产生关联,也可以说是和组件之间进行绑定。而报错提醒你的是,你在组件之外使用该函数,它就不知道该找哪个组件进行绑定,导致数据无处安放。