【问题标题】:Vue 3 Composition API - Property returned by setup() "accessed during render but is not defined on instance."Vue 3 Composition API - setup() 返回的属性“在渲染期间访问但未在实例上定义。”
【发布时间】:2021-03-19 01:49:27
【问题描述】:

我正在使用 Vue 3 的 Composition API 创建一个小的应用内消息控制台,但我不知道代码中的错误在哪里。 渲染这个组件,state 在渲染期间被访问(在循环中),但我认为我在setup() 返回的对象中正确定义了它:

<template>
  <div>
    <p class="message" v-for="message in state.messages" v-bind:key="message.id">{{message.text}}</p>
  </div>
</template>

<script lang="ts" >
import { Options, Vue } from 'vue-class-component';
import { consoleStore } from "@/store/ConsoleStore"

@Options({})
export default class Console extends Vue {
  setup() {
      console.log("setup entered")
      consoleStore.record("This is a test.")
      let state = consoleStore.getState()
      return {
        state
      }
  }
}
</script>

更重要的是,console.log("setup entered") 行不会向开发控制台输出任何内容。好像从未输入过设置块。 对于consoleStore,我正在实现this article 中提出的简单Vue 3 store 类,所以它应该是readonly(reactive(stuff))

import { reactive, readonly } from 'vue';

export abstract class AbstractStore<T extends Object> {
    protected state: T;

    constructor() {
        let data = this.data();
        this.setup(data);
        this.state = reactive(data) as T;
    }

    protected abstract data(): T

    protected setup(data: T): void { }

    public getState(): T {
        return readonly(this.state) as T
    }
}

【问题讨论】:

    标签: typescript vue.js vuejs3 vue-composition-api


    【解决方案1】:

    我认为您缺少在类组件中导入 setup

    import { Options, Vue,setup  } from 'vue-class-component';
    import { consoleStore } from "@/store/ConsoleStore"
    
    function useState () {
     console.log("setup entered")
          consoleStore.record("This is a test.")
          let state = consoleStore.getState()
          return {
            state
          }
    }
    @Options({})
    export default class Console extends Vue {
     state= setup(() =>useState()) 
    }
    </script>
    

    【讨论】:

    • 这行得通,我不知道为什么。这是在哪里记录的?
    • 请查看我的answer,您会发现两个详细介绍这些功能的链接
    猜你喜欢
    • 2021-11-14
    • 2021-11-16
    • 2022-01-09
    • 2021-07-09
    • 1970-01-01
    • 2022-01-12
    • 2021-11-05
    • 2021-04-26
    • 1970-01-01
    相关资源
    最近更新 更多