vue3如何创建组件与步骤

好的,在 Vue 3 中创建组件主要分为两种方式:选项式 API (Options API) 和 组合式 API (Composition API)。我将为你详细讲解这两种方式的创建步骤、区别以及如何选择。


核心概念:什么是 Vue 组件?

一个 Vue 组件就是一个扩展名为 .vue 的文件(单文件组件,简称 SFC),它将模板(HTML)、逻辑(JavaScript)和样式(CSS)封装在一个文件中。

一个组件文件通常包含三个部分:

  1. <template>:负责组件的结构(HTML)。

  2. <script>:负责组件的逻辑(JavaScript/TypeScript)。

  3. <style>:负责组件的样式(CSS/SCSS等)。


方式一:组合式 API (Composition API) - 【现代和推荐的方式】

这是 Vue 3 推荐的主要方式,它通过导入的 API 函数来组织代码逻辑,使得相关功能的代码可以集中在一起,更容易维护和复用。

创建步骤:
  1. 使用 setup 语法糖 (<script setup>)
    这是最简洁、最常用的方式。在 <script> 标签上添加 setup 属性,代码会在组件创建前执行。

  2. 定义响应式数据
    使用 ref (用于基本类型) 或 reactive (用于对象) 来创建响应式数据。

  3. 定义函数方法
    直接声明函数即可。

  4. 定义生命周期钩子
    使用 onMountedonUpdated 等函数来注册生命周期钩子。

  5. 模板部分
    在 <template> 中,定义的变量和函数可以直接使用,无需返回。

示例:一个简单的计数器组件

vue

<!-- MyCounter.vue -->
<template>
  <div>
    <p>Count is: {{ count }}</p>
    <button @click="increment">+1</button>
  </div>
</template>

<script setup>
// 1. 导入所需的 API
import { ref, onMounted } from 'vue'

// 2. 定义响应式状态 ( reactive state )
const count = ref(0)

// 3. 定义函数方法
function increment() {
  count.value++
}

// 4. 定义生命周期钩子
onMounted(() => {
  console.log('组件已挂载!初始计数是:', count.value)
})
</script>

<style scoped>
/* 你的组件样式,scoped 表示这些样式只作用于当前组件 */
button {
  background-color: #4CAF50;
}
</style>

<script setup> 的优势

  • 更少的样板代码:不需要手动 return 变量和函数。

  • 更好的 TypeScript 支持

  • 更好的性能


方式二:选项式 API (Options API) - 【传统方式】

这是 Vue 2 的经典方式,也是 Vue 3 仍然完全支持的方式。它通过一组选项对象(如 datamethodsmounted 等)来组织代码,逻辑分布清晰,对初学者更友好。

创建步骤:
  1. 导出一个选项对象
    使用 export default {} 导出一个包含组件选项的对象。

  2. 定义数据 (data)
    data 选项是一个函数,它返回一个对象,对象的属性会成为组件的响应式数据。

  3. 定义方法 (methods)
    methods 选项是一个对象,里面包含组件的所有方法。

  4. 定义生命周期钩子
    直接在选项对象下添加 mountedupdated 等函数。

  5. 模板部分
    在 <template> 中,可以访问 data 中定义的数据和 methods 中定义的方法。

示例:同样的计数器组件(选项式 API)

vue

<!-- MyCounterOptions.vue -->
<template>
  <!-- 与组合式 API 的模板完全相同 -->
  <div>
    <p>Count is: {{ count }}</p>
    <button @click="increment">+1</button>
  </div>
</template>

<script>
export default {
  // 组件选项
  data() {
    return {
      count: 0 // 响应式数据
    }
  },
  methods: {
    increment() {
      this.count++ // 通过 this 访问数据
    }
  },
  mounted() {
    console.log('组件已挂载!初始计数是:', this.count)
  }
}
</script>

<style scoped>
/* 样式同上 */
</style>

如何在父组件中使用子组件?

创建好组件后,你需要在一个父组件中导入并使用它。

使用步骤(在组合式 API 中):
  1. 导入组件:使用 import 语句导入 .vue 文件。

  2. 直接使用:在 <template> 中,你可以直接使用导入的组件名作为标签(通常是驼峰命名或横线连接)。

vue

<!-- App.vue -->
<template>
  <div>
    <h1>我的 Vue 3 应用</h1>
    <!-- 3. 在模板中使用组件 -->
    <MyCounter />
    <!-- 也可以使用横线连接的方式 <my-counter /> -->
  </div>
</template>

<script setup>
// 1. 导入组件
import MyCounter from './components/MyCounter.vue'

// 2. 在 <script setup> 中,导入后即可直接使用,无需注册 components: {}
</script>
在选项式 API 中注册:

vue

<!-- App.vue (选项式) -->
<template>
  <div>
    <h1>我的 Vue 3 应用</h1>
    <MyCounter />
  </div>
</template>

<script>
import MyCounter from './components/MyCounter.vue'

export default {
  // 必须在这里注册组件
  components: {
    MyCounter
  }
}
</script>

如何选择两种方式?

特性组合式 API (<script setup>)选项式 API
学习曲线稍高,需要理解 refreactive 等概念较低,结构清晰,易于入门
代码组织逻辑功能组织代码,相关代码在一起选项类型组织代码(data, methods等)
逻辑复用极强,使用组合式函数(Composables)较弱,使用 mixins(有命名冲突等缺点)
TypeScript 支持原生支持极好支持,但不如组合式流畅
推荐程度Vue 3 官方推荐,是新项目的主流选择仍然完全支持,适合从 Vue 2 迁移或偏好此风格的开发者

简单建议

  • 新项目:强烈建议直接从组合式 API 开始。

  • 老项目迁移或团队习惯:可以继续使用选项式 API,两者甚至可以在同一个项目中混合使用。

希望这个详细的步骤和对比能帮助你顺利创建 Vue 3 组件!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

leijmdas

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值