当前位置: 首页 > news >正文

Vue 3 的核心组合式 API 函数及其完整示例、使用场景和总结表格

以下是 Vue 3 的核心组合式 API 函数及其完整示例、使用场景和总结表格:
在这里插入图片描述


1. ref

作用

创建一个响应式引用值,用于管理基本类型或单个值的响应式状态。

示例
<template><div><p>Count: {{ count }}</p><button @click="increment">Increment</button></div>
</template><script setup>
import { ref } from 'vue';const count = ref(0);const increment = () => {count.value++; // 通过.value修改值
};
</script>

2. reactive

作用

创建一个响应式对象,用于管理复杂对象的响应式状态。

示例
<template><div><p>Name: {{ user.name }}</p><p>Age: {{ user.age }}</p><button @click="updateUser">Update User</button></div>
</template><script setup>
import { reactive } from 'vue';const user = reactive({name: 'Alice',age: 25
});const updateUser = () => {user.name = 'Bob';user.age = 30;
};
</script>

3. computed

作用

创建一个计算属性,基于响应式数据动态计算值。

示例
<template><div><p>First: {{ firstName }}</p><p>Last: {{ lastName }}</p><p>Full Name: {{ fullName }}</p></div>
</template><script setup>
import { ref, computed } from 'vue';const firstName = ref('John');
const lastName = ref('Doe');const fullName = computed(() => {return `${firstName.value} ${lastName.value}`;
});
</script>

4. watch

作用

监视响应式数据的变化,并在变化时执行回调。

示例
<template><div><input v-model="message" placeholder="输入内容..." /><p>输入内容变化次数:{{ changeCount }}</p></div>
</template><script setup>
import { ref, watch } from 'vue';const message = ref('');
const changeCount = ref(0);watch(message, (newValue, oldValue) => {changeCount.value++;
});
</script>

5. watchEffect

作用

自动追踪响应式依赖,并在依赖变化时执行回调(无需手动指定依赖项)。

示例
<template><div><input v-model="text" placeholder="输入内容..." /><p>输入内容反转:{{ reversedText }}</p></div>
</template><script setup>
import { ref, watchEffect } from 'vue';const text = ref('');
let reversedText = '';watchEffect(() => {reversedText = text.value.split('').reverse().join('');
});
</script>

6. onMounted

作用

在组件挂载完成后执行初始化逻辑(生命周期钩子)。

示例
<template><div ref="myDiv">Hello Vue!</div>
</template><script setup>
import { ref, onMounted } from 'vue';const myDiv = ref(null);onMounted(() => {console.log('Component mounted:', myDiv.value.offsetHeight);
});
</script>

7. nextTick

作用

在 Vue 完成 DOM 更新后执行回调。

示例
<template><div ref="box">Click to change color</div><button @click="changeColor">Change Color</button>
</template><script setup>
import { ref, nextTick } from 'vue';const box = ref(null);const changeColor = () => {box.value.style.backgroundColor = 'lightblue';nextTick(() => {console.log('DOM updated:', box.value.style.backgroundColor);});
};
</script>

8. provide & inject

作用

实现祖先进级通信,父组件提供数据,子组件注入使用。

示例

父组件(Parent.vue):

<template><ChildComponent />
</template><script setup>
import { provide, ref } from 'vue';
import ChildComponent from './ChildComponent.vue';const theme = ref('light');
provide('theme', theme);
</script>

子组件(ChildComponent.vue):

<template><div :class="theme.value">当前主题:{{ theme.value }}</div>
</template><script setup>
import { inject } from 'vue';const theme = inject('theme');
</script>

9. toRefs

作用

reactive 对象的属性转换为独立的 ref 引用,避免解构后失去响应性。

示例
<template><div><p>Name: {{ name }}</p><p>Age: {{ age }}</p></div>
</template><script setup>
import { reactive, toRefs } from 'vue';const state = reactive({name: 'Alice',age: 25
});// 使用toRefs保持响应性
const { name, age } = toRefs(state);
</script>

10. shallowReactive & shallowRef

作用

创建浅层响应式对象/引用,仅追踪顶级属性变化。

示例
<template><div><p>{{ obj.name }}</p><p>{{ obj.detail }}</p></div>
</template><script setup>
import { shallowReactive } from 'vue';const obj = shallowReactive({name: 'Item',detail: { price: 100 }
});// 修改顶级属性会触发更新
obj.name = 'New Item'; // 修改嵌套属性不会触发更新(需使用reactive)
obj.detail.price = 200; // 不会触发视图更新
</script>

总结表格

函数作用示例代码片段使用场景
ref创建响应式引用值(基本类型或单值)const count = ref(0); count.value++管理单个值(如计数器、布尔标志)
reactive创建响应式对象或数组const user = reactive({ name: 'Alice' }); user.name = 'Bob'管理复杂对象/数组的响应式状态
computed定义计算属性(基于响应式数据动态计算值)const fullName = computed(() => firstName.value + lastName.value)需要动态计算值时(如合并多个响应式值)
watch监听响应式数据变化并执行回调watch(message, (newVal) => console.log(newVal))需要响应数据变化时执行副作用(如日志、API请求)
watchEffect自动追踪依赖并响应变化watchEffect(() => console.log(text.value))需要自动追踪依赖项的副作用(无需手动指定依赖)
onMounted组件挂载后执行逻辑(生命周期钩子)onMounted(() => console.log('Mounted!'))初始化操作(如数据获取、DOM操作)
nextTick在 DOM 更新后执行回调nextTick(() => console.log(element.offsetHeight))需要操作更新后的 DOM 元素
provide/inject祖先进级通信(父组件提供数据,子组件注入使用)provide('theme', theme)const theme = inject('theme')需要在多层组件间共享数据
toRefs将 reactive 对象的属性转为 ref,保持响应性const { name } = toRefs(state)解构 reactive 对象后仍需保持响应性
shallowReactive创建浅层响应式对象(仅追踪顶级属性)const obj = shallowReactive({ name: 'Item' })管理嵌套层级较深的对象,优化性能

关键区别

对比项refreactivewatchwatchEffect
适用类型基本类型、单个值对象、数组任何响应式数据自动追踪依赖
访问方式.value直接访问属性需指定依赖项无需指定依赖项
响应性深度深响应深响应支持嵌套属性变化支持嵌套属性变化

如果需要其他函数(如 onUnmountedgetCurrentInstance 等)的示例或进一步解释,请随时告知!

http://www.xdnf.cn/news/122671.html

相关文章:

  • 《从混乱到有序:ArkUI项目文件结构改造指南》
  • YOLO训练时到底需不需要使用权重
  • Ubuntu / WSL 安装pipx
  • Kingbase性能优化浅谈
  • 书籍推荐:《价值心法》一姜胡说
  • Selenium 怎么加入代理IP,以及怎么检测爬虫运行的时候,是否用了代理IP?
  • ospf综合作业
  • kubernetes》》k8s》》Dashboard
  • rocky9.4部署k8s群集v1.28.2版本(containerd)(纯命令)
  • 运维打铁:Centos 7使用yum安装 Redis 5
  • 模糊控制Fuzzy control
  • 《深入理解计算机系统》阅读笔记之第一章 计算机系统漫游
  • 面试之消息队列
  • OpenAI为何觊觎Chrome?AI时代浏览器争夺战背后的深层逻辑
  • Phthon
  • 智能吸顶灯/摄影补光灯专用!FP7195双通道LED驱动,高效节能省空间 !
  • 学员答题pk知识竞赛小程序怎么做
  • 视频汇聚平台EasyCVR赋能高清网络摄像机:打造高性价比视频监控系统
  • C++如何理解和避免ABA问题?在无锁编程中如何解决
  • 对话模型和补全模型区别
  • 聊聊Spring AI Alibaba的OneNoteDocumentReader
  • 【C/C++干货】VS Code 快捷键大全
  • 线上助农产品商城小程序源码介绍
  • 测试模版x
  • HTML5 详细学习笔记
  • torch serve部署原理探索
  • Comsol 超声波测厚度
  • Flask + ajax上传文件(一)
  • 访问者模式:分离数据结构与操作的设计模式
  • 什么是CMMI认证?CMMI评估内容?CMMI认证能带来哪些好处?