vue3编写组件的几种方式

一、选项式写法

1、在 vue2.x 项目中使用的写法就是选项API的 写法(说明:类似于与vue2中的data里面写的是定义的数据,methods里面写的是处理数据的方法,每一个选项都只负责自己的部分)

优点:易于学习,代码位置固定,便于阅读;
缺点:代码组织性差,相似的逻辑代码不便于复用;

2、vue3的选项式写法中也可以有vue2的写法,如果是新项目,应只选择vue3的写法(这里指vue3的项目),代码如下:

<template>
  <div>
    <div>
      num3: {
    
    {
    
     num3 }}
    </div>
    <div>
      num2: {
    
    {
    
     num2 }}
    </div>
  </div>
</template>
// 类似于vue2中,data中定义数据,methods就写方法,每一个选项就写对应所负责的东西
<script>
import {
    
     ref } from "vue";
export default {
    
    
  // vue3代码
  props: {
    
    
    testProps: {
    
    
      type: Number,
      default: () => {
    
    
        return 123456;
      },
    },
  }, // 接收传过来的数据
  setup(props, context) {
    
    
    console.log("setup的props", props); // 父组件传递过来的数据,但是前提是需要在props进行数据的接收,否则无法使用
    console.log("testProps", props.testProps); // 123456
    console.log("setup的context", context);
    const num3 = ref(1);
    const addV3 = () => {
    
    
      num3.value++;
    };
    return {
    
     num3, addV3 }; // 使用选项式写法这里必须将数据return出去
  },
  // vue2代码
  data() {
    
    
    return {
    
    
      num2: 456,
    };
  },
  methods: {
    
    
    addV2() {
    
    
      this.num2++; // 这里面是可以使用this的,但是setup中不可以使用this
    },
  },
  mounted() {
    
    },
};
</script>

二、组合式写法

1. 组合式写法(vue3特有的写法)

优点:一个功能逻辑的代码组织写在一起的,便于阅读和维护;
缺点:需要有良好的代码组织能力和拆分逻辑能力;

说明:使用选项式的写法写vue3里面可以有vue2的代码,但是如果采用vue3语法糖的写法里面是不能有vue2的写法的;

<template>
  <div>
    <div>
      num: {
    
    {
    
     num }}
    </div>
    <div>
      comValue: {
    
    {
    
     comValue }}
    </div>
  </div>
</template>
// 组合式写法
<script setup> // vue3的语法糖
import {
    
     computed, ref } from "vue";

const num = ref(123);
const comValue = computed(() => {
    
    
  return num.value = num.value + 1;
})
const add = () => {
    
    
    num.value++ // 使用ref定义的值需要使用点value的形式进行取值
}
console.log(comValue.value); // 124
</script>

二、JSX写法

1.使用defineComponent来书写组件的代码

<template>
  <div>
    <div>
      num: {
    
    {
    
     num }}
    </div>
  </div>
</template>
<script>
import {
    
     defineComponent, ref } from "vue";
// 在defineComponent使用vue3+vue2写法
export default defineComponent({
    
    
  setup() {
    
    
    const num = ref(12);
    return {
    
    
      num
    }
  },
  data() {
    
    
    return {
    
     count: 1 }
  },
  methods: {
    
    
    increment() {
    
    
      this.count++;
    }
  }
})
// 直接在defineComponent使用vue3写法
// export default defineComponent(() =>{
    
    
//   const count = ref(0)
//   return { count }
// })
</script>

总结

虽然vue3出来也有一段时间了,但是很多项目还是用的vue2,我觉得我们也应该慢慢的去使用vue3了,从vue2到vue3的过渡,要养成一个良好的编码习惯;建议使用vue3组合式的语法糖写法。

猜你喜欢

转载自blog.csdn.net/qq_45787691/article/details/127301805