uni-app nvue引入pinia报错

发布于 1周前 作者 zlyuanteng 来自 Uni-App

uni-app nvue引入pinia报错

操作步骤:

  • 创建一个nvue界面,创建一个piniastore,在nvue中导入pinia
import {defineStore} from 'pinia'  
import { computed, reactive, ref } from 'vue'  

export const useUserStore = defineStore('user', () => {  
    const count = ref(0)  

    return {  
        count  
    }  
})
<template>  
    <view>  
        nvue页面测试pinia  
    </view>  
</template>  

<script>  
import {useUserStore} from '../../store/user.js'  
export default {  
    data() {  
        return {  

        }  
    },  
    methods: {  

    }  
}  
</script>  

<style>  

</style>

预期结果:

  • 不报错

实际结果:

  • reportJSException >>> exception function:createInstanceContext, exception:white screen cause create instanceContext failed,check js stack ->Uncaught TypeError: (0 , import_pinia.defineStore) is not a function

bug描述:

  • 在nvue中导入pinia报错
  • reportJSException >>> exception function:createInstanceContext, exception:white screen cause create instanceContext failed,check js stack ->Uncaught TypeError: (0 , import_pinia.defineStore) is not a function

nvue测试Piniabug.zip


17 回复

顶顶顶顶


hx 最新版本3.4.14 在nvue使用pinia也还是报错-

回复 1***@sina.com: 仔细看文档说明,示例代码,必须在main.js中返回Pinia

回复 DCloud_UNI_FXY: main中返回Pinia了,也报错

使用nvue作为首屏,在首屏使用pinia,会报这个错,要怎么处理。

遇到了一样的问题

一样的问题

搞定了!!! 按照 pinia 官网文档 的写法 import { createPinia } from ‘pinia’

export function createApp() {

const Pinia = createPinia()
return {Pinia}
} 这种写法 在nvue页面 引入会导致失败 需要按照uniapp的文档来写: import * as Pinia from ‘pinia’

export function createApp() {

app.use(Pinia.createPinia())
return {Pinia}
}

在mian.js这样引入了,一样报错了。

回复 z***@163.com: 好兄弟解决了吗

可以解决 // main.js import { createSSRApp } from ‘vue’ import * as Pinia from ‘pinia’ import { createUnistorage } from ‘./uni_modules/pinia-plugin-unistorage’
export function createApp() { const app = createSSRApp(App)
const store = Pinia.createPinia()

// 关键代码

// main.js import { createSSRApp } from ‘vue’ import * as Pinia from ‘pinia’ import { createUnistorage } from ‘./uni_modules/pinia-plugin-unistorage’

export function createApp() { const app = createSSRApp(App)

uni-app 中使用 nvue 页面时,引入 Pinia 可能会遇到一些问题,因为 nvue 页面的运行环境与普通的 vue 页面有所不同。以下是一些可能的原因和解决方案:

1. 确保 Pinia 版本兼容

首先,确保你使用的 Pinia 版本与 uni-appnvue 兼容。Pinia 是一个较新的状态管理库,可能需要使用较新的 uni-app 版本。

2. 检查 Pinia 的引入方式

nvue 页面中,确保你正确地引入了 Pinia。通常,你需要在 main.jsmain.nvue 中初始化 Pinia

// main.js
import { createApp } from 'vue'
import { createPinia } from 'pinia'
import App from './App.vue'

const pinia = createPinia()
const app = createApp(App)

app.use(pinia)
app.mount('#app')

3. 确保 nvue 页面支持 Vue 3

nvue 页面默认使用的是 Vue 2,而 Pinia 是为 Vue 3 设计的。如果你在 nvue 页面中使用 Pinia,需要确保你的项目是基于 Vue 3 的。

uni-app 项目中,你可以在 manifest.json 中配置使用 Vue 3

{
  "vueVersion": "3"
}

4. 检查 nvue 页面的生命周期

nvue 页面的生命周期与普通的 vue 页面有所不同,确保你在 nvue 页面中正确地使用了 Pinia 的状态管理。

5. 使用 uni-app 的插件机制

如果直接在 nvue 页面中使用 Pinia 仍然有问题,可以尝试使用 uni-app 的插件机制,将 Pinia 的状态管理封装成一个插件,然后在 nvue 页面中使用。

6. 检查控制台错误信息

如果遇到报错,仔细查看控制台的错误信息,通常会给出具体的错误原因。根据错误信息进行排查和修复。

7. 使用 uni-app 的全局变量

如果 Pinianvue 页面中无法正常工作,可以考虑使用 uni-app 的全局变量来管理状态,虽然这不是最佳实践,但在某些情况下可以作为一种临时解决方案。

8. 参考官方文档和社区

uni-appPinia 的官方文档以及社区论坛中可能会有其他开发者遇到类似问题并提供了解决方案,可以参考这些资源。

示例代码

以下是一个简单的示例,展示如何在 uni-appnvue 页面中使用 Pinia

// store/counter.js
import { defineStore } from 'pinia'

export const useCounterStore = defineStore('counter', {
  state: () => ({
    count: 0
  }),
  actions: {
    increment() {
      this.count++
    }
  }
})
// main.js
import { createApp } from 'vue'
import { createPinia } from 'pinia'
import App from './App.vue'

const pinia = createPinia()
const app = createApp(App)

app.use(pinia)
app.mount('#app')
<!-- pages/index.nvue -->
<template>
  <view>
    <text>{{ count }}</text>
    <button @click="increment">Increment</button>
  </view>
</template>

<script>
import { useCounterStore } from '@/store/counter'

export default {
  setup() {
    const counterStore = useCounterStore()
    return {
      count: counterStore.count,
      increment: counterStore.increment
    }
  }
}
</script>
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!