跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
JavaScript大前端

Vue 3 编程的 10 个实用技巧

Vue 3 开发的 10 个实用技巧,涵盖响应式数据管理(ref/reactive)、组合式 API、数据监听(watch/watchEffect)、跨组件通信(provide/inject)、Teleport、Suspense、v-model 改进、defineComponent TypeScript 支持、Fragment 多根节点及自定义指令。掌握这些技巧有助于提升代码质量与开发效率。

GopherDev发布于 2026/4/5更新于 2026/7/2146 浏览
Vue 3 编程的 10 个实用技巧

1. 使用 ref 和 reactive 管理响应式数据

原理解析

Vue 3 引入了 ref 和 reactive 两个核心 API 来管理响应式数据:

  • ref:用于创建基本类型(如字符串、数字)的响应式数据,返回一个包含 value 属性的对象。
  • reactive:用于创建复杂对象或数组的响应式数据,返回一个代理对象。

代码示例

import { ref, reactive } from 'vue';

// 使用 ref 管理基本类型数据
const count = ref(0);
console.log(count.value); // 0

// 使用 reactive 管理复杂对象
const state = reactive({
  name: 'Vue 3',
  version: '3.2.0',
});
console.log(state.name); // Vue 3

注意事项

  • 使用 ref 时,需要通过 .value 访问或修改数据。
  • reactive 只能用于对象或数组,不能用于基本类型。

2. 组合式 API(Composition API)

原理解析

组合式 API 是 Vue 3 的核心特性之一,它允许开发者将逻辑代码组织成可复用的函数,而不是依赖于选项式 API(如 data、methods 等)。通过 setup 函数,开发者可以更灵活地管理组件的状态和逻辑。

代码示例

import { ref, computed } from 'vue';

export default {
  setup() {
     count = ();
     doubleCount = ( count. * );

     () {
      count.++;
    }

     {
      count,
      doubleCount,
      increment,
    };
  },
};
const
ref
0
const
computed
() =>
value
2
function
increment
value
return

优势

  • 逻辑复用性更强。
  • 代码组织更清晰,尤其是复杂组件。

3. 使用 watch 和 watchEffect 监听数据变化

原理解析

  • watch:用于监听特定响应式数据的变化,支持深度监听和懒执行。
  • watchEffect:自动追踪其依赖的响应式数据,并在依赖变化时立即执行。

代码示例

import { ref, watch, watchEffect } from 'vue';

const count = ref(0);

// 使用 watch 监听 count 的变化
watch(count, (newValue, oldValue) => {
  console.log(`count changed from ${oldValue} to ${newValue}`);
});

// 使用 watchEffect 自动追踪依赖
watchEffect(() => {
  console.log(`count is now ${count.value}`);
});

注意事项

  • watch 更适合精确控制监听逻辑。
  • watchEffect 适合不需要明确指定依赖的场景。

4. 使用 provide 和 inject 实现跨组件通信

原理解析

provide 和 inject 是 Vue 3 中实现跨组件通信的 API,特别适合在深层嵌套组件中传递数据。

代码示例

// 父组件
import { provide, ref } from 'vue';

export default {
  setup() {
    const message = ref('Hello from parent');
    provide('message', message);
  },
};

// 子组件
import { inject } from 'vue';

export default {
  setup() {
    const message = inject('message');
    return { message };
  },
};

优势

  • 避免逐层传递 props 的繁琐。
  • 适合全局状态管理(如主题、用户信息等)。

5. 使用 Teleport 实现组件挂载到任意位置

原理解析

Teleport 是 Vue 3 新增的特性,允许将组件的内容渲染到 DOM 中的任意位置,常用于模态框、通知等场景。

代码示例

<template>
  <button @click="showModal = true">Open Modal</button>
  <Teleport to="body">
    <div v-if="showModal" class="modal">
      <p>This is a modal!</p>
      <button @click="showModal = false">Close</button>
    </div>
  </Teleport>
</template>
<script>
import { ref } from 'vue';

export default {
  setup() {
    const showModal = ref(false);
    return { showModal };
  },
};
</script>

优势

  • 解决组件层级和样式隔离问题。
  • 提升用户体验。

6. 使用 Suspense 处理异步组件加载

原理解析

Suspense 是 Vue 3 中用于处理异步组件加载的特性,可以在组件加载完成前显示占位内容。

代码示例

<template>
  <Suspense>
    <template #default>
      <AsyncComponent />
    </template>
    <template #fallback>
      <div>Loading...</div>
    </template>
  </Suspense>
</template>
<script>
import { defineAsyncComponent } from 'vue';

const AsyncComponent = defineAsyncComponent(() => import('./AsyncComponent.vue'));

export default {
  components: {
    AsyncComponent,
  },
};
</script>

优势

  • 提升用户体验,避免页面空白。
  • 简化异步组件加载逻辑。

7. 使用 v-model 实现双向绑定

原理解析

Vue 3 对 v-model 进行了改进,支持多个 v-model 绑定,并可以通过 modelValue 和 update:modelValue 自定义绑定逻辑。

代码示例

<template>
  <CustomInput v-model:firstName="firstName" v-model:lastName="lastName" />
</template>
<script>
import { ref } from 'vue';

export default {
  setup() {
    const firstName = ref('John');
    const lastName = ref('Doe');
    return { firstName, lastName };
  },
};
</script>
自定义组件 CustomInput
<template>
  <input :value="firstName" @input="$emit('update:firstName', $event.target.value)" />
  <input :value="lastName" @input="$emit('update:lastName', $event.target.value)" />
</template>
<script>
export default {
  props: ['firstName', 'lastName'],
};
</script>

优势

  • 支持多个 v-model 绑定。
  • 更灵活的双向绑定实现。

8. 使用 defineComponent 增强 TypeScript 支持

原理解析

defineComponent 是 Vue 3 中用于增强 TypeScript 支持的 API,可以提供更好的类型推断和代码提示。

代码示例

import { defineComponent, ref } from 'vue';

export default defineComponent({
  setup() {
    const count = ref(0);
    return { count };
  },
});

优势

  • 提升 TypeScript 开发体验。
  • 更好的类型安全和代码提示。

9. 使用 Fragment 减少不必要的 DOM 元素

原理解析

Vue 3 支持多根节点组件(Fragment),可以减少不必要的 DOM 元素,提升渲染性能。

代码示例

<template>
  <header>Header</header>
  <main>Main Content</main>
  <footer>Footer</footer>
</template>

优势

  • 减少不必要的 DOM 层级。
  • 提升渲染性能。

10. 使用 Custom Directives 自定义指令

原理解析

Vue 3 允许开发者自定义指令,用于直接操作 DOM 元素。

代码示例

import { directive } from 'vue';

const vFocus = {
  mounted(el) {
    el.focus();
  },
};

export default {
  directives: {
    focus: vFocus,
  },
};

使用示例

<input v-focus />

优势

  • 提供更灵活的 DOM 操作能力。
  • 适合实现特定功能(如自动聚焦、拖拽等)。

总结

本文详细介绍了 Vue 3 编程中的 10 个实用技巧,涵盖了响应式数据管理、组合式 API、跨组件通信、异步组件加载等多个方面。通过掌握这些技巧,开发者可以更高效地构建现代化的 Vue 应用,提升代码质量和开发体验。

目录

  1. 1. 使用 ref 和 reactive 管理响应式数据
  2. 原理解析
  3. 代码示例
  4. 注意事项
  5. 2. 组合式 API(Composition API)
  6. 原理解析
  7. 代码示例
  8. 优势
  9. 3. 使用 watch 和 watchEffect 监听数据变化
  10. 原理解析
  11. 代码示例
  12. 注意事项
  13. 4. 使用 provide 和 inject 实现跨组件通信
  14. 原理解析
  15. 代码示例
  16. 优势
  17. 5. 使用 Teleport 实现组件挂载到任意位置
  18. 原理解析
  19. 代码示例
  20. 优势
  21. 6. 使用 Suspense 处理异步组件加载
  22. 原理解析
  23. 代码示例
  24. 优势
  25. 7. 使用 v-model 实现双向绑定
  26. 原理解析
  27. 代码示例
  28. 自定义组件 CustomInput
  29. 优势
  30. 8. 使用 defineComponent 增强 TypeScript 支持
  31. 原理解析
  32. 代码示例
  33. 优势
  34. 9. 使用 Fragment 减少不必要的 DOM 元素
  35. 原理解析
  36. 代码示例
  37. 优势
  38. 10. 使用 Custom Directives 自定义指令
  39. 原理解析
  40. 代码示例
  41. 使用示例
  42. 优势
  43. 总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • RAG 技术演进:DeepSeek 与 Neo4j 构建 GraphRAG 企业智能体系
  • 基于 LangChain-Chatchat 实现本地知识库问答应用快速上手
  • 算法实战:位运算与字符唯一性判断
  • 县域烟花禁燃监管 GIS 实践:Java 调用高德地图 API 盘点销售点
  • AI 产品经理转行入门指南:从零开始掌握核心技能与职业路径
  • Java Web 开发基础与 Servlet 核心技术
  • 滑动窗口算法专题 (一)
  • 腾讯云轻量应用服务器部署 OpenClaw 接入 QQ 与飞书机器人
  • ChatGPT 到 AI 大模型私有化部署:企业技术选择分析
  • JavaScript 开发中,为何不该把对象当 Map 用
  • 自主机器人核心技术学习指南
  • GIF 图片出处反查爬虫实现方案
  • Linux 进程管理:创建、终止与回收全流程解析
  • VS Code 禁用 GitHub Copilot 代码补全的方法
  • AIGC 赋能 Java 编程:智能工具提升效率与创新
  • C++ 基础实战:从循环控制到算法入门
  • SQL Server 2022 安装配置与基础使用指南
  • 飞算 JavaAI:基于自然语言的 Java 工程代码生成实践
  • LeetCode 面试经典 150 题回顾
  • OpenAI o3 模型深度剖析:能力评估与未来展望

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online