Vue 3 Hooks: 深入理解 Composition API 的魅力

hooks简介

Vue 3 引入了革命性的 Composition API,它提供了一系列的 Hooks(也称为Composition Functions),让组件的逻辑组织更加清晰、复用性更强。本文将深入探讨Vue 3的Hooks使用,从基础概念到实践应用,带你领略这一新特性的魅力。

一、前言:Vue 3 的变革

Vue 3 在保留了Vue 2的易用性和灵活性的同时,通过引入Composition API,实现了逻辑的模块化和组件功能的高效复用。Composition API的核心思想是通过组合函数(Composition Functions)来组织和复用逻辑,与React的Hooks有异曲同工之妙,但又有着Vue特有的优雅和简洁。

二、认识Setup函数

在Vue 3中,每个组件都可以定义一个setup函数,这是Composition API的入口点。setup函数会在组件实例被创建之前执行,它接收两个参数:propscontext,并返回一个对象,该对象的属性将被合并到组件的模板上下文中。

 
<script setup> 
import { ref } from 'vue';
const message = ref('Hello Vue 3!'); 
</script><template> <h1>{{ message }}</h1> </template>

注意:在最新Vue版本中,可以使用<script setup>语法糖,直接在模板中使用定义的变量,无需显式返回对象。

三、核心Hooks解析

Vue 3提供了一系列核心Hooks,用于管理状态、响应式数据、生命周期等。

  1. ref和reactive - 管理响应式数据的两种方式。ref用于基础类型,reactive用于对象或数组。
import { ref, reactive } from 'vue'; 
const count = ref(0);const user = reactive({ name: 'Vue User' });
  1. computed - 创建计算属性,只有当依赖发生变化时才会重新计算。
import { computed } from 'vue';
const doubleCount = computed(() => count.value * 2);

  1. watch - 监听数据变化,执行回调函数。
import { watch } from 'vue';
watch(count, (newValue, oldValue) => {console.log(`count changed from ${oldValue} to ${newValue}`); 
});
  1. onMounted, onUnmounted - 生命周期钩子,分别在组件挂载和卸载时执行。
import { onMounted, onUnmounted } from 'vue';onMounted(() => { console.log('Component mounted'); }); 
onUnmounted(() => { console.log('Component unmounted'); });
四、自定义Hooks

Vue 3鼓励创建自定义Hooks,以复用逻辑。自定义Hooks本质上是一个返回对象或函数的普通JavaScript函数,可以在其他组件的setup函数中调用。

// useCounter.js
export function useCounter(initialCount = 0) {const count = ref(initialCount);function increment() {count.value++;}return { count, increment };
}// 在组件中使用
import { useCounter } from './useCounter';setup() {const { count, increment } = useCounter(10);// ...
}
五、总结

Vue 3的Composition API通过Hooks机制,不仅提升了代码的可维护性和复用性,还赋予了开发者更高的自由度和灵活性。掌握这些核心Hooks及其用法,是深入Vue 3开发的关键。无论是管理状态、处理副作用还是自定义逻辑复用,Hooks都是Vue 3中不可或缺的工具,帮助你构建更强大、更优雅的应用。随着实践的深入,你将更能体会其设计哲学的魅力所在。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/831379.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kerckhoffs原则详细介绍

Kerckhoffs原则&#xff0c;也被称为柯克霍夫原则或柯克霍夫假说&#xff0c;是密码学中的一个核心原则&#xff0c;它起源于19世纪&#xff0c;由荷兰语言学家和密码学家Auguste Kerckhoffs提出。这一原则在密码学领域具有深远的影响&#xff0c;为现代密码系统的设计和安全性…

数据结构(三)------栈

制作不易&#xff0c;三连支持一下呗&#xff01;&#xff01;&#xff01; 文章目录 前言一、什么是栈二、栈的实现 1.栈的结构2.栈的初始化和销毁3.栈的插入数据和删除数据4.取栈顶元素总结 前言 前面我们介绍了第二种数据结构---链表&#xff0c;这里我们继续介绍下一种数据…

SpringBoot3 + SpringSecurity6 + JWT

相关链接 Spring Security mvnrepository 1. pom 引入 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency><groupId>org.spring…

Python一些可能用的到的函数系列126 UCS函数

说明 UCS(Universal Calculation Standard)要求数据是以块进行组织的&#xff1a; 1 数据的存储要按块2 数据的处理也是按块 内容 1 已经完成的部分 假设&#xff0c;数据是按照数值顺序编号的。最常见的是mysql的自增ID&#xff0c;因为这种范式比较好&#xff0c;所以我…

计算机网络-408考研

后续更新发布在B站账号&#xff1a;谭同学很nice http://【计算机408备考-什么是计算机网络&#xff0c;有什么特点&#xff1f;】 https://www.bilibili.com/video/BV1qZ421J7As/?share_sourcecopy_web&vd_source58c2a80f8de74ae56281305624c60b13http://【计算机408备考…

在idea中连接mysql

IDE&#xff08;集成开发环境&#xff09;是一种软件应用程序&#xff0c;它为开发者提供编程语言的开发环境&#xff0c;通常集成了编码、编译、调试和运行程序的多种功能。一个好的IDE可以大幅提高开发效率&#xff0c;尤其是在进行大型项目开发时。IDE通常包括以下几个核心组…

Docker-Compose编排lnmp(dockerfile) 完成Wordpress

目录 一、创建nginx镜像 二、创建mysql镜像 三、创建php镜像 四、启动wordpress 五、安装Compose 六、准备环境 ​编辑 七、编写docker-compose.yml 八、启动并运行 九、浏览器访问 一、创建nginx镜像 #基于基础镜像 FROM centos:7 #用户信息 MAINTAINER this is ngi…

LabVIEW换智能仿真三相电能表研制

LabVIEW换智能仿真三相电能表研制 在当前电力工业飞速发展的背景下&#xff0c;确保电能计量的准确性与公正性变得尤为重要。本文提出了一种基于LabVIEW和单片机技术&#xff0c;具有灵活状态切换功能的智能仿真三相电能表&#xff0c;旨在通过技术创新提高电能计量人员的培训…

vue初始化项目

打开终端输入vue create project-name 选择Manually select features回车&#xff0c;继续选择如下&#xff1a; 如果要使用pina就可以不选vuex&#xff0c;回车&#xff0c;选择如下&#xff1a; 按下图选即可

BJFUOJ-C++程序设计-实验2-类与对象

A 评分程序 答案&#xff1a; #include<iostream> #include<cstring>using namespace std;class Score{ private:string name;//记录学生姓名double s[4];//存储4次成绩&#xff0c;s[0]和s[1]存储2次随堂考试&#xff0c;s[2]存储期中考试&#xff0c;s[3]存储期…

与 Apollo 共创生态:企业解决方案Apollo X 9.0,七载同舟,携手远航,视频简说

目录 介绍背景方案与项目Apollo 开源项目Apollo X 企业解决方案落地因素助力企业落地流程 预置套件需求定义功能定义场景用例融合技术面向园区功能安全Cyber RT企业硬件套件 开发工具链研发迭代范式协同研发工具链标定工具地图工具仿真平台数据闭环 企业合作模式合作方式 共创计…

概述小样本学习的具体应用场景

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 小样本学习&#xff08;Few-shot Learning&#xff0c;FSL&#xff09;作为机器学习的一个重要分支&#xff0c;特别强调从极少量的标注数据中学习和泛化的能力。这在众多领域都有广泛的应用&#xff0…

windows ubuntu sed,awk,grep篇:12.awk 关联数组

目录 78. 引用数组元素 79.使用循环遍历 awk 数组 80. 删除数组元素 81. 多维数组 82. SUBSEP 下标分隔符 83. 用 asort 为数组排序 84. 用 asorti 为索引排序 相比较与其他编程语言中的传统数组&#xff0c; awk 的数组更为强大。 Awk 的数组&#xff0c;都是关联数组&…

挑战一周完成Vue3项目Day4: 用户管理+角色管理+菜单管理+首页+暗黑模式/主题切换

一、用户管理 1.静态搭建 src/views/acl/user/index.vue <template><el-card style"height:80px;"><el-form :inline"true" class"form"><el-form-item label"用户名&#xff1a;"><el-input placehold…

Docker——生产案例(如何修改Docker部署服务的端口映射)

目录 前言 1. 测试环境中新建Apache服务 2.停止容器和Docker服务 3.修改容器配置 4.重启Docker服务并访问测试 前言 由于接替原工作人员的工作之后&#xff0c;上级需要修改Docker部署Apache服务的端口映射&#xff0c;将89端口修改为99端口&#xff0c;那我们该如何修改呢…

JAVA 学习·泛型(二)——通配泛型

有关泛型的基本概念&#xff0c;参见我的前一篇博客 JAVA 学习泛型&#xff08;一&#xff09;。 协变性 泛型不具备协变性 在介绍通配泛型之前&#xff0c;先来看一下下面的例子。我们定义了一个泛型栈&#xff1a; import java.util.ArrayList; class GenericStack<E>…

如何完全卸载QT

第一步&#xff0c;用QT自带的软件卸载QT 第二步&#xff0c;卸载下面路径的所有QT配置 C:用户/(你的用户)/AppData/Local/目录下所有与Qt相关内容 C:用户/(你的用户)/AppData/Local/Temp/所有与Qt相关内容 C:用户/(你的用户)/AppData/Roaming/所有与Qt相关内容

android init进程启动流程

Android系统完整的启动流程 android 系统架构图 init进程的启动流程 init进程启动服务的顺序 bool Service::Start() {// Starting a service removes it from the disabled or reset state and// immediately takes it out of the restarting state if it was in there.flags_…

【C语言笔记】【有点逗系列】 一个打印 Hello, world! 的程序

【C语言笔记】【有点逗系列】 一个打印 Hello, world! 的程序 有点逗系列内容。用于记录各式各样有点逗甚至没有什么用的C语言用法☺。 功能说明 在网上看到了一个表面上很混乱但是实则没什么用处的打印 Hello, world! 的程序。 程序如下&#xff1a; main(){int i,n[]{(((…

开发和运维同学必备的文件操作相关的bash命令

开发和运维同学必备的文件操作相关的Linux命令&#xff1a; ls&#xff1a;列出当前目录的文件和文件夹。 lscd&#xff1a;切换目录。 cd /path/to/directorypwd&#xff1a;显示当前所在目录。 pwdmkdir&#xff1a;创建新目录。 mkdir directory_namerm&#xff1a;删除文件…