Vue3/Pinia:在可组合项中使用 Pinia store 会在 pinia 核心代码中引发 TypeError

Vue3/Pinia: Using Pinia store inside a composable throws TypeError within pinia core code

提问人:btsfreak 提问时间:10/27/2023 更新时间:10/27/2023 访问量:24

问:

我们正在运行一个用 vite 和 Vue3 编译的 SPA。 一旦我们在可组合项中调用 useStore() 函数,我们就会在 pinia 代码中遇到 Type Error:

Uncaught (in promise) TypeError: Cannot read properties of undefined (reading '_s')

它发生在 pinia 核心代码中

我们可以在应用程序 (SPA) 中的其他任何地方使用此商店而不会出现问题。 似乎可组合项运行得太早并产生此错误,因为 pinia 实例尚未准备好(这里存在类似的问题,尽管使用 SSG:https://github.com/antfu/vite-ssg/issues/103 )

  1. 创建虚拟存储 import { defineStore } from 'pinia'
import { ref } from 'vue'
import type { Ref } from 'vue'

export const useTestStore = defineStore('customer-portal', () => {
  console.log('Defining Teststore...')
  const test: Ref<string> = ref('')
  return {
    test,
  }
})
  1. 使用此存储创建可组合项:
import { ref } from 'vue'
import { useTestStore } from '@/vue/store/test'
const store = useTestStore()
  1. 在组件中使用 theat composable(导入存储并调用 useTestStore())
vuejs3 皮尼亚 可组合

评论

0赞 Michal Levý 10/28/2023
你的问题很难回答。需要更多的背景信息。使用 CodeSandbox 等服务提供最小的可重现示例。
0赞 yoduh 10/31/2023
如果你在可组合代码的顶部调用,那么它将在应用完全初始化之前被调用。这不是您在执行此操作时看到的常见错误消息,但是您没有显示可组合项的确切工作方式,因此可能还有其他因素正在影响它。通常,可组合文件具有一个函数,您可以导出并在应用的其他位置使用。 在该函数中调用 useTestStore()。该函数本身在应用程序初始化之前不会运行,因此当它运行时,它将正常工作。useTestStore

答: 暂无答案