vue3中的defineComponent详解

1,666 阅读1分钟

vue3中,新增了 defineComponent ,它并没有实现任何的逻辑,只是把接收的 Object 直接返回,它的存在是完全让传入的整个对象获得对应的类型,它的存在就是完全为了服务 TypeScript 而存在的。最主要的功能是为了 ts 下的类型推断

下面是我想通过了解一段项目代码的意义来理解defineComponent

image.png

image.png

下面是我在vue3项目中看到的真实情况:

1、没有defineComponent时候:

image.png

1、有defineComponent时候:

image.png

image.png

以上就是我刚接触vue3和ts没多久时在项目中实际遇到的问题,但是搞半天我还是没有弄明白我疑惑的地方,下面是使用GPT3.5 Model了解的结果,多少有点清楚了:

image.png

image.png

image.png

import { defineComponent } from 'vue';

export default defineComponent({
  name: 'MyComponent',
  props: {
    message: {
      type: String,
      required: true
    },
    count: {
      type: Number,
      default: 0
    }
  },
  data() {
    return {
      foo: 'bar',
      baz: 123
    };
  },
  methods: {
    handleClick() {
      this.baz++;
    }
  },
  computed: {
    computedMessage() {
      return this.message.toUpperCase();
    }
  },
  template: `
    <div>
      <h1>{{ computedMessage }}</h1>
      <p>Count: {{ count }}</p>
      <button @click="handleClick">Increment Baz</button>
      <p>Baz: {{ baz }}</p>
    </div>
  `
});

在这个例子中,我们使用defineComponent函数来定义一个名为MyComponent的组件。在props属性中,我们明确指定了message和count属性的类型,并且将message属性标记为必需的。在data方法中,我们返回了一个对象,明确指定了foo和baz属性的类型。在methods方法中,我们定义了一个handleClick方法。在computed属性中,我们定义了一个computedMessage计算属性。最后,在template中,我们使用了这些属性和方法来渲染组件的模板。