Nuxt,VueJS必须在setup函数中调用

ezykj2lf  于 2023-08-07  发布在  Vue.js
关注(0)|答案(3)|浏览(181)

我有个项目目前在某个网站上有。我需要做些改变。当我从gitlab下载一个项目并运行时,它会抛出一个错误:* This must be called within a setup function.*
路径:.nuxt/composition-api/index.js

const useContext = () => {
  const vm = CompositionApi.getCurrentInstance();
  if (!vm)
    throw new Error("This must be called within a setup function.");
  return {
    ...(vm[globalNuxt] || vm.$options).context,
    route: CompositionApi.computed(() => vm.$route),
    query: CompositionApi.computed(() => vm.$route.query),

字符串
怎么了?
我需要运行该项目以进行一些更改,但无法将其部署到本地服务器上。
更新:useContex是默认的。vue

...
setup (_, { isServer, refs }: any) {
    // console.info(context)
    // const refs = context.refs
    const { store } = useContext()
    const { scrolllock } = scrollLock(store)
    const locationName = computed(() => store.getters.locationName)
    const location = computed({
      set (val: boolean) {
        store.dispatch('setLocationModal', val)
      },
      get () {
        return store.getters.locationModal
      }
    })
...

我尝试访问站点时的cmd输出

[Vue warn]: [vue-composition-api] already installed. Vue.use(VueCompositionAPI) should be called only once.

 ERROR  [Vue warn]: Error in data(): "Error: This must be called within a setup function."                    22:50:04

found in

---> <Layouts/default.vue> at layouts/default.vue
       <Root>

 ERROR  [Vue warn]: Error in data(): "Error: This must be called within a setup function."                    22:50:05

found in

---> <Layouts/default.vue> at layouts/default.vue
       <Root>

 ERROR  [Vue warn]: Error in data(): "Error: This must be called within a setup function."                    22:50:24

found in

---> <Layouts/default.vue> at layouts/default.vue
       <Root>

pepwfjgg

pepwfjgg1#

根据我的经验,npm不能安装@nuxtjs/composition-api旧版本,或者类似的东西,所以我卸载了它的旧版本并安装了新版本,它工作正常
这就是我所做

rm -rf node_modules && rm -rf package-lock.json && npm uninstall @nuxtjs/composition-api && npm i @nuxtjs/composition-api && npm i

字符串

o0lyfsai

o0lyfsai2#

从现在的情况来看

  • 你为VueCompositionAPI创建了另一个插件,当它已经安装时,例如@nuxtjs/composition-api

我建议你从你的项目中删除任何其他的composition-api,并坚持使用最新版本的官方@nuxtjs/composition-api with Vuex v4 for Nuxt 2。
在最新版本的@nuxtjs/composition-api中,可以使用

const store = useStore();
// OR
const { store } = useContext();

字符串
注意:你必须直接在setup()函数中定义像const router = useStore()这样的辅助函数,而不是在你的方法中,以避免This must be called within a setup function错误。
对于那些想要使用route
为了顺利升级到Nuxt 3,建议 * 不要**从useContext访问routequeryfromparams,而是使用useRoute辅助函数。

ssgvzors

ssgvzors3#

我不知道那里发生了什么。我删除了那个仓库并再次克隆了它。接下来我这样做:npm init,然后是npm run dev,这样就行了。

相关问题