10个Vue3中的编程实用技巧分享

 更新时间:2025年03月24日 08:47:03   作者:百锦再@新空间代码工作室  
这篇文章主要为大家详细介绍了10个Vue3中的编程实用技巧,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下

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() {
    const count = ref(0);

    const doubleCount = computed(() => count.value * 2);

    function increment() {
      count.value++;
    }

    return {
      count,
      doubleCount,
      increment,
    };
  },
};

优势

逻辑复用性更强。

代码组织更清晰,尤其是复杂组件。

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 应用,提升代码质量和开发体验。

到此这篇关于10个Vue3中的编程实用技巧分享的文章就介绍到这了,更多相关Vue3编程技巧内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue中keep-alive内置组件缓存的实例代码

    vue中keep-alive内置组件缓存的实例代码

    这篇文章主要介绍了vue中的keep-alive内置组件缓存,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • element-plus dialog v-loading不生效问题及解决

    element-plus dialog v-loading不生效问题及解决

    这篇文章主要介绍了element-plus dialog v-loading不生效问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • vue项目中使用qrcodesjs2生成二维码简单示例

    vue项目中使用qrcodesjs2生成二维码简单示例

    最近项目中需生成二维码,发现了很好用的插件qrcodesjs2,所以下面这篇文章主要给大家介绍了关于vue项目中使用qrcodesjs2生成二维码的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • Vue列表渲染v-for的使用案例详解

    Vue列表渲染v-for的使用案例详解

    这篇文章主要介绍了Vue列表渲染(v-for的使用),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • 关于vue-color-颜色选择器插件

    关于vue-color-颜色选择器插件

    这篇文章主要介绍了关于vue-color-颜色选择器插件,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • Vue局部组件数据共享Vue.observable()的使用

    Vue局部组件数据共享Vue.observable()的使用

    随着组件的细化,就会遇到多组件状态共享的情况,今天我们介绍的是 vue.js 2.6 新增加的 Observable API ,通过使用这个 api 我们可以应对一些简单的跨组件数据状态共享的情况,感兴趣的可以了解一下
    2021-06-06
  • vue实现用户登录切换

    vue实现用户登录切换

    这篇文章主要为大家详细介绍了vue实现用户登录切换,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-04-04
  • vue2之vue.config.js最全配置教程

    vue2之vue.config.js最全配置教程

    本文主要介绍了vue2之vue.config.js最全配置教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • vue 使用axios 数据请求第三方插件的使用教程详解

    vue 使用axios 数据请求第三方插件的使用教程详解

    这篇文章主要介绍了vue 使用axios 数据请求第三方插件的使用 ,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07
  • vue.js根据图片url进行图片下载

    vue.js根据图片url进行图片下载

    最近在做一个前端vue.js对接的功能模块时,需要实现一个下载图片的功能,本文就介绍了vue.js根据图片url进行图片下载,感兴趣的可以了解一下
    2021-06-06

最新评论