写点什么

深入浅出 Vue3:组件与模板基础全解析

  • 2025-02-19
    福建
  • 本文字数:1657 字

    阅读完需:约 5 分钟

一、Vue3 组件结构详解


1.1 单文件组件(SFC)架构


Vue3 采用.vue单文件组件模式,一个典型组件包含三个区块:


<template>  <!-- 组件的HTML模板 --></template> <script setup>  // 组件的JavaScript逻辑(推荐使用Composition API)</script> <style scoped>  /* 组件的CSS样式(scoped表示样式隔离) */</style>
复制代码



各区块作用说明:


  • <template>:定义组件视图层,支持所有 HTML 语法+Vue 指令扩展

  • <script setup>:使用setup语法糖简化响应式变量声明(替代 Vue2 的 Options API)

  • <style scoped>:添加scoped属性后,样式仅作用于当前组件(通过自动添加data-v-*属性实现)


1.2 组件导出与组合式 API


通过<script setup>语法糖,无需显式导出组件对象:


<script setup>import { ref } from 'vue' // 响应式数据声明const count = ref(0)// 方法定义const increment = () => count.value++</script>
复制代码


组合式 API 优势:

  1. 更好的逻辑复用(通过自定义 Hook)

  2. 更灵活的逻辑组织(按功能而非选项类型拆分)

  3. 更好的 TypeScript 支持


二、Vue3 模板语法深度解析


2.1 数据绑定核心语法


(1)文本插值:{{ }}


<p>Message: {{ message }}</p>
复制代码


  • 支持 JavaScript 表达式:{{ message.split('').reverse().join('') }}

  • 自动响应式更新(数据变化时视图同步更新)


(2)属性绑定:v-bind(简写:


<img :src="dynamicSrc" :alt="imgAlt"><a :href="url">Link</a>
复制代码


2.2 常用指令大全



关键区别说明:

  • v-ifvs v-show:前者直接移除 DOM 元素,后者通过display:none控制

  • v-for必须配合:key使用,用于高效 DOM 更新


2.3 动态样式绑定技巧


<!-- 对象语法 --><div :class="{ active: isActive, 'text-danger': hasError }"></div> <!-- 数组语法 --><div :class="[activeClass, errorClass]"></div> <!-- 内联样式 --><div :style="{ color: activeColor, fontSize: fontSize + 'px' }"></div>
复制代码


三、实战示例:TodoList 组件开发


<template>  <div class="todo-container">    <h2>{{ title }}</h2>    <input v-model="newTodo" @keyup.enter="addTodo">    <ul>      <li v-for="(todo, index) in todos" :key="todo.id">        <span :class="{ completed: todo.done }">{{ todo.text }}</span>        <button @click="toggleTodo(index)">✓</button>      </li>    </ul>  </div></template> <script setup>import { ref } from 'vue' const title = ref('Vue3 Todo List')const newTodo = ref('')const todos = ref([  { id: 1, text: 'Learn Vue3', done: false },  { id: 2, text: 'Build Project', done: true }]) const addTodo = () => {  if (newTodo.value.trim()) {    todos.value.push({      id: Date.now(),      text: newTodo.value,      done: false    })    newTodo.value = ''  }} const toggleTodo = (index) => {  todos.value[index].done = !todos.value[index].done}</script> <style scoped>.todo-container {  max-width: 400px;  margin: 20px auto;}.completed {  text-decoration: line-through;  color: #666;}</style>
复制代码


代码解析流程图:



四、最佳实践与常见问题


4.1 组件设计原则


  • 单一职责原则:每个组件只做一件事

  • 合理拆分:当组件超过 200 行代码时考虑拆分

  • props 验证:使用 TypeScript 或defineProps进行类型校验


4.2 常见错误排查


<!-- 错误示例:直接修改props --><button @click="props.count++">Increase</button> <!-- 正确做法:通过emit事件 --><button @click="$emit('update-count')">Increase</button>
复制代码


五、总结


通过本篇章,我们对 Vue3 的组件结构和模板语法有了更清晰的认识。熟练掌握这些基础知识,将为我们后续构建复杂的 Vue3 应用打下坚实的基础。在接下来的文章中,我们将进一步深入学习 Vue3 的更多高级特性和功能,例如 Composition API、响应式系统、路由管理等。敬请期待!


文章转载自:Code_Cracke

原文链接:https://www.cnblogs.com/proer-blog/p/18723131

体验地址:http://www.jnpfsoft.com/?from=001YH

用户头像

还未添加个人签名 2023-06-19 加入

还未添加个人简介

评论

发布
暂无评论
深入浅出 Vue3:组件与模板基础全解析_JavaScript_不在线第一只蜗牛_InfoQ写作社区