Skip to content

Vue3 组件、指令、修饰符详解

一、核心组件(按重要程度排序)

1. <template>

  • 重要程度:★★★★★
  • 功能:定义组件的模板结构
  • 使用场景
    • 每个Vue组件的根元素
    • 包含HTML结构和Vue指令
    • 支持条件渲染、列表渲染等

2. <component>

  • 重要程度:★★★★★
  • 功能:动态组件,根据is属性渲染不同组件
  • 使用场景
    • 组件切换(如标签页、选项卡)
    • 根据条件加载不同组件
    • 组件的动态懒加载

3. <slot>

  • 重要程度:★★★★☆
  • 功能:插槽,用于组件内容分发
  • 使用场景
    • 组件内容定制
    • 具名插槽实现复杂布局
    • 作用域插槽传递数据

4. <teleport>

  • 重要程度:★★★☆☆
  • 功能:将内容渲染到指定DOM节点
  • 使用场景
    • 模态框、通知等需要脱离父组件层级的元素
    • 全局弹窗、提示信息

5. <suspense>

  • 重要程度:★★★☆☆
  • 功能:处理异步组件的加载状态
  • 使用场景
    • 异步组件的加载和错误处理
    • 骨架屏、加载动画

二、内置指令(按重要程度排序)

1. v-if / v-else-if / v-else

  • 重要程度:★★★★★
  • 功能:条件渲染
  • 使用场景
    • 根据条件显示/隐藏元素
    • 多条件分支判断
    • 复杂的逻辑判断

2. v-for

  • 重要程度:★★★★★
  • 功能:列表渲染
  • 使用场景
    • 遍历数组、对象、数字等
    • 渲染列表数据
    • 配合key属性优化性能

3. v-model

  • 重要程度:★★★★★
  • 功能:双向数据绑定
  • 使用场景
    • 表单输入绑定
    • 组件间数据同步
    • 复杂表单处理

4. v-show

  • 重要程度:★★★★☆
  • 功能:条件显示(通过CSS)
  • 使用场景
    • 频繁切换的元素
    • 性能要求较高的场景

5. v-bind (:)

  • 重要程度:★★★★☆
  • 功能:动态绑定属性
  • 使用场景
    • 绑定HTML属性
    • 绑定CSS类和样式
    • 绑定组件props

6. v-on (@)

  • 重要程度:★★★★☆
  • 功能:事件监听
  • 使用场景
    • 绑定DOM事件
    • 绑定自定义事件
    • 事件处理和修饰符

7. v-html

  • 重要程度:★★★☆☆
  • 功能:插入HTML内容
  • 使用场景
    • 渲染富文本内容
    • 动态HTML内容
    • 注意:可能导致XSS攻击

8. v-text

  • 重要程度:★★★☆☆
  • 功能:插入文本内容
  • 使用场景
    • 显示纯文本内容
    • 防止HTML解析

9. v-pre

  • 重要程度:★★☆☆☆
  • 功能:跳过编译
  • 使用场景
    • 显示原始Vue语法
    • 性能优化(跳过不需要编译的内容)

10. v-cloak

  • 重要程度:★★☆☆☆
  • 功能:防止闪烁
  • 使用场景
    • 页面加载时防止未编译的模板显示

11. v-once

  • 重要程度:★★☆☆☆
  • 功能:只渲染一次
  • 使用场景
    • 静态内容优化
    • 避免不必要的重新渲染

三、修饰符(按重要程度排序)

1. 事件修饰符

.stop

  • 重要程度:★★★★★
  • 功能:阻止事件冒泡
  • 使用场景
    • 嵌套元素的事件处理
    • 防止事件向上传播

.prevent

  • 重要程度:★★★★★
  • 功能:阻止默认行为
  • 使用场景
    • 表单提交
    • 链接点击
    • 键盘事件

.self

  • 重要程度:★★★★☆
  • 功能:只在事件目标是元素本身时触发
  • 使用场景
    • 避免子元素触发父元素事件

.capture

  • 重要程度:★★★☆☆
  • 功能:使用捕获模式
  • 使用场景
    • 需要在事件冒泡前处理

.once

  • 重要程度:★★★☆☆
  • 功能:事件只触发一次
  • 使用场景
    • 一次性操作
    • 防止重复提交

.passive

  • 重要程度:★★★☆☆
  • 功能:提升滚动性能
  • 使用场景
    • 滚动事件
    • 触摸事件

2. 按键修饰符

.enter

  • 重要程度:★★★★★
  • 功能:回车键触发
  • 使用场景
    • 表单提交
    • 搜索框确认

.tab

  • 重要程度:★★★☆☆
  • 功能:Tab键触发
  • 使用场景
    • 表单导航
    • 焦点切换

.delete / .esc / .space

  • 重要程度:★★★☆☆
  • 功能:对应按键触发
  • 使用场景
    • 特定按键操作
    • 快捷键功能

3. 系统修饰符

.ctrl / .alt / .shift / .meta

  • 重要程度:★★★☆☆
  • 功能:系统按键触发
  • 使用场景
    • 组合快捷键
    • 特定操作

4. 鼠标修饰符

.left / .right / .middle

  • 重要程度:★★☆☆☆
  • 功能:鼠标按键触发
  • 使用场景
    • 鼠标特定按键操作
    • 上下文菜单

5. v-model 修饰符

.lazy

  • 重要程度:★★★★☆
  • 功能:失去焦点时更新
  • 使用场景
    • 减少频繁更新
    • 提高性能

.number

  • 重要程度:★★★★☆
  • 功能:转换为数字
  • 使用场景
    • 数字输入
    • 数值计算

.trim

  • 重要程度:★★★★☆
  • 功能:去除首尾空格
  • 使用场景
    • 表单输入
    • 用户名、密码等

四、使用场景综合示例

1. 表单处理

vue
<template>
  <form @submit.prevent="handleSubmit">
    <input v-model.trim="username" placeholder="用户名" />
    <input v-model.number="age" type="number" placeholder="年龄" />
    <button type="submit">提交</button>
  </form>
</template>

2. 列表渲染

vue
<template>
  <ul>
    <li v-for="item in items" :key="item.id" @click.stop="selectItem(item)">
      {{ item.name }}
    </li>
  </ul>
</template>

3. 条件渲染

vue
<template>
  <div v-if="isLoading">加载中...</div>
  <div v-else-if="hasError">错误信息</div>
  <div v-else>内容</div>
</template>

4. 组件切换

vue
<template>
  <component :is="currentComponent" />
  <button @click="currentComponent = 'ComponentA'">组件A</button>
  <button @click="currentComponent = 'ComponentB'">组件B</button>
</template>

5. 模态框

vue
<template>
  <teleport to="body">
    <div v-if="showModal" class="modal">
      <div class="modal-content">
        <slot></slot>
        <button @click="showModal = false">关闭</button>
      </div>
    </div>
  </teleport>
</template>

五、最佳实践

  1. 性能优化

    • 使用 v-show 替代 v-if 处理频繁切换的元素
    • 列表渲染使用 key 属性
    • 合理使用 v-once 处理静态内容
  2. 代码可读性

    • 合理使用简写形式(如 : 代替 v-bind@ 代替 v-on
    • 保持模板结构清晰
    • 避免过度嵌套
  3. 安全性

    • 谨慎使用 v-html,防止XSS攻击
    • 对用户输入进行验证
  4. 事件处理

    • 合理使用事件修饰符
    • 避免在模板中写复杂的逻辑
  5. 组件设计

    • 合理使用插槽进行内容分发
    • 组件职责单一
    • 考虑组件的可复用性

通过合理使用Vue3的组件、指令和修饰符,可以构建出更加高效、可维护的应用程序。

基于 VitePress 的本地知识库