Vue3/Pinia:defineStore内带默认值的ref在组件中访问始终为undefined,是否正常?
Pinia中defineStore返回的ref在组件中初始访问为undefined的问题解答
这种情况不是Pinia的有意设计,问题出在你访问store属性的方式错误。
问题原因
Pinia通过useStore()返回的store实例是一个代理对象,它会自动对内部的ref进行解包。也就是说,在组件中你不需要通过.value访问store里的ref值,直接使用属性名即可。
你当前代码里的selection.contents.value,相当于去访问一个已经被解包的数组的.value属性——而数组本身没有这个属性,所以会得到undefined,最终触发Cannot read properties of undefined (reading 'length')的错误。
最佳解决方法
直接去掉多余的.value,修改computed计算属性的代码:
const thereIsSelection = computed(() => { return selection.contents.length > 0; })
补充说明
- 在store内部定义和操作
ref时,需要使用.value;但在组件中通过store实例访问时,Pinia已经完成了解包,直接用属性名就能拿到对应的值。 - 你提到的“用computed兜底返回数组”的方案完全没必要,因为store里的
contents初始就是空数组,只要修正访问方式就能正常获取到值。
内容的提问来源于stack exchange,提问作者maestroosram
相关产品推荐
相关产品推荐

