vue3编写组件的几种实现方式

 更新时间:2023年06月30日 09:19:06   作者:lethe_R  
这篇文章主要介绍了vue3编写组件的几种实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

一、选项式写法

在 vue2.x 项目中使用的写法就是选项API的写法

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

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

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>

二、组合式写法

组合式写法(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写法

使用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组合式的语法糖写法。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • nuxt中刷新页面后防止store值丢失问题

    nuxt中刷新页面后防止store值丢失问题

    这篇文章主要介绍了nuxt中刷新页面后防止store值丢失问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • vue中v-model指令与.sync修饰符的区别详解

    vue中v-model指令与.sync修饰符的区别详解

    本文主要介绍了vue中v-model指令与.sync修饰符的区别详解,详细的介绍了两个的用法和区别,感兴趣的可以了解一下
    2021-08-08
  • Vue中使用md5进行数据加密的实现方法

    Vue中使用md5进行数据加密的实现方法

    在现代Web开发中,数据安全是一个不可忽视的重要环节,Vue.js作为一个流行的前端框架,不仅提供了强大的数据绑定和组件化功能,还支持与各种后端服务的集成,本文将探讨如何在Vue应用中使用MD5算法来加密数据,从而提升应用的安全性,需要的朋友可以参考下
    2024-10-10
  • Vue使用html2canvas实现截取图片并保存

    Vue使用html2canvas实现截取图片并保存

    html2canvas是一个JavaScript库,它可以将HTML元素转换为Canvas元素本文将介绍一下Vue如何使用html2canvas实现截取图片并保存功能,需要的可以参考下
    2023-12-12
  • Vue导出页面为PDF格式的实现思路

    Vue导出页面为PDF格式的实现思路

    这篇文章主要介绍了Vue导出页面为PDF格式的实现思路,其实思路也很简单,就是将页面转换成图片格式.然后通过图片的base64码.生成PDF..感兴趣的朋友跟随脚本之家小编一起看看吧
    2018-07-07
  • vue 实现剪裁图片并上传服务器功能

    vue 实现剪裁图片并上传服务器功能

    这篇文章主要介绍了vue 实现剪裁图片并上传服务器功能,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-03-03
  • Element-UI实现复杂table表格结构的操作代码

    Element-UI实现复杂table表格结构的操作代码

    Element-UI组件el-table用于展示多条结构类似的数据,可对数据进行排序、筛选、对比或其他自定义操作,本文给大家介绍Element-UI实现复杂table表格结构的操作代码,感兴趣的朋友一起看看吧
    2023-12-12
  • Vue + SpringBoot 实现文件的断点上传、秒传存储到Minio的操作方法

    Vue + SpringBoot 实现文件的断点上传、秒传存储到Minio的操作方法

    这篇文章主要介绍了Vue + SpringBoot 实现文件的断点上传、秒传存储到Minio的操作方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-06-06
  • vue实现自定义颜色选择器

    vue实现自定义颜色选择器

    这篇文章主要为大家详细介绍了如何使用vue实现一个自定义颜色选择器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-04-04
  • vue报错之exports is not defined问题的解决

    vue报错之exports is not defined问题的解决

    这篇文章主要介绍了vue报错之exports is not defined问题的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07

最新评论