Vue3作为现代前端主流框架,是前后端开发者都应当掌握的核心技能。本篇文章将带你了解vue3的基础核心知识,适合学习与复习

一、Vue 3 应用创建

1.1 创建Vue应用的基本步骤

// main.js
import { createApp } from 'vue'  // 1. 导入createApp函数
import App from './App.vue'     // 2. 导入根组件const app = createApp(App)      // 3. 创建应用实例
app.mount('#app')               // 4. 挂载到DOM元素

详细说明:

  • createApp 是Vue 3新引入的函数,替代了Vue 2的new Vue()

  • 每个Vue应用都是通过createApp函数创建的

  • mount()方法将Vue应用挂载到指定的DOM元素上(通常是index.html中的<div id="app"></div>

二、模板语法详解

2.1 文本插值

<template><p>{{ message }}</p>  <!-- 双大括号语法 -->
</template><script setup>
const message = 'Hello Vue 3!'
</script>

要点:

  • 双大括号{{ }}称为"Mustache"语法

  • 内部可以写简单的JavaScript表达式

  • 不支持语句或复杂逻辑(应该使用计算属性)

2.2 常用指令

v-if / v-else / v-else-if

<div v-if="score >= 90">优秀</div>
<div v-else-if="score >= 60">及格</div>
<div v-else>不及格</div>

注意事项:

  • 条件渲染会真正创建/销毁元素

  • 频繁切换时考虑使用v-show

v-for

<ul><li v-for="(item, index) in items" :key="item.id">{{ index }} - {{ item.name }}</li>
</ul>

最佳实践:

  • 必须为每个项提供唯一的:key

  • 可以使用对象解构:v-for="{ id, name } in users"

v-bind (缩写:)

<img :src="imageUrl" :alt="imageAlt">
<div :class="{ active: isActive, 'text-danger': hasError }"></div>

v-on (缩写@)注册事件

<button @click="handleClick">点击</button>
<input @keyup.enter="submit">

v-model

<input v-model="message" placeholder="输入内容">
<select v-model="selected"><option value="A">选项A</option>
</select>

原理: 相当于以下语法糖

<input :value="text" @input="text = $event.target.value"
>

三、响应式系统核心

3.1 ref 和 reactive

一:ref 是什么?

在 Vue 3 或者其他采用响应式设计的框架里,ref 是用于创建响应式数据的函数。它会把传入的参数封装成一个对象,这个对象具备 .value 属性,借助这个属性就能访问或修改原始值。

<script setup>
import { ref, reactive } from 'vue'// 基本类型使用ref
const count = ref(0)
console.log(count.value) // 访问值// 对象类型使用reactive
const user = reactive({name: 'Alice',age: 25
})
console.log(user.name) // 直接访问
</script>

区别对比:

特性refreactive
适用类型基本类型对象类型
访问方式需要.value直接访问
模板中使用自动解包直接使用
重新赋值支持不推荐

3.2 响应式原理

Vue 3使用Proxy实现响应式:

  • 当数据变化时,自动更新DOM

  • 跟踪依赖关系,精确更新

  • 性能优于Vue 2的Object.defineProperty

四、计算属性和监听器

4.1 计算属性 (computed)

核心步骤:1导入computed函数

                  2执行函数在回调参数中return基于响应式数据做计算的值,用变量接收

<script setup>
import { ref, computed } from 'vue'const price = ref(10)
const quantity = ref(2)// 自动计算总价(有缓存)
const total = computed(() => {return price.value * quantity.value//这里面放计算属性的计算逻辑
})
</script>

特点:

  • 基于它们的响应式依赖进行缓存

  • 依赖不变时不会重新计算

  • 适合复杂逻辑计算

最佳实践:1计算属性中不应该有副作用,比如异步请求修改dom

                  2避免直接修改计算属性的值

4.2 监听器 (watch)

作用:侦听一个或者多个数据的变化,数据变化时执行回调函数

回调函数:作为参数传递给其他函数的一种函数,其目的是在某个特定事件发生或者完成特定操作之后再执行。

一:监听一个数据的变化

import { ref, watch } from 'vue'const count = ref(0)// 当count变化时执行
watch(count, (新值, 旧值) => {console.log(`计数器从${旧值}变成了${新值}`)
})

二:监听多个数据的变化 

const count = ref(0)
const name = ref('张三')// 同时监听count和name
watch([count, name], ([新count, 新name], [旧count, 旧name]) => {console.log(`count变化: ${旧count}→${新count}`)console.log(`name变化: ${旧name}→${新name}`)
})

三:immediate立即执行

const user = ref(null)// 页面加载时立即执行一次
watch(user, (新值) => {if(新值) {console.log('用户数据:', 新值)}
}, {immediate: true  // 关键配置
})

使用场景:页面初始化时需要立即获取数据 

四: 深度监听(deep)

const formData = ref({name: '',address: {city: '',district: ''}
})// 监听对象内部变化
watch(formData, (新值) => {console.log('表单变化:', 新值)
}, {deep: true  // 监听对象内部属性变化
})

默认watch进行的是浅层监视,监视简单数据类型的数据,使用deep:true后则可以监视复杂数据类型的变化

使用场景:监听复杂对象或嵌套数据

 五: 精确控制监听

watch(() => user.value.age,  // 只监听user对象的age属性(新年龄) => {console.log('年龄变化:', 新年龄)}
)

五、组件基础

5.1 组件定义

<!-- ChildComponent.vue -->
<template><div class="child"><h3>{{ title }}</h3><button @click="emitEvent">触发事件</button></div>
</template><script setup>
// 定义props
defineProps({title: {type: String,default: '默认标题'}
})// 定义emits
const emit = defineEmits(['custom-event'])const emitEvent = () => {emit('custom-event', '额外数据')
}
</script>

5.2 组件使用

<template><ChildComponent title="子组件标题"@custom-event="handleEvent"/>
</template><script setup>
import ChildComponent from './ChildComponent.vue'const handleEvent = (data) => {console.log('收到子组件事件:', data)
}
</script>

六、生命周期钩子

Vue 3主要生命周期:

import { onMounted, onUpdated, onUnmounted } from 'vue'onMounted(() => {console.log('组件挂载完成')// 适合做DOM操作、API请求等
})onUpdated(() => {console.log('组件更新完成')
})onUnmounted(() => {console.log('组件卸载')// 适合做清理工作
})

完整生命周期流程:

  1. setup() → 2. onBeforeMount → 3. onMounted → 4. onBeforeUpdate → 5. onUpdated → 6. onBeforeUnmount → 7. onUnmounted


记住:Vue 3的学习是一个循序渐进的过程,建议边学边实践,通过小项目巩固知识。

组件定意的详细内容见Vue 3 核心概念详解:生命周期、组件通信与模板引用

 

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

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

相关文章

Bootstrap 5学习教程,从入门到精通,Bootstrap 5 Flex 布局语法知识点及案例(27)

Bootstrap 5 Flex 布局语法知识点及案例 Bootstrap 5 提供了强大的 Flexbox 工具集&#xff0c;让布局变得更加简单灵活。以下是 Bootstrap 5 Flex 布局的完整知识点和详细案例代码。 一、Flex 布局基础语法 1. 启用 Flex 布局 <div class"d-flex">我是一个…

HarmonyOS 5智能单词应用开发:记忆卡(附:源码

一、应用概述与核心价值 在语言学习过程中&#xff0c;单词记忆是基础也是难点。本文介绍的智能单词记忆卡应用通过创新的交互设计和科学的学习模式&#xff0c;帮助用户高效记忆单词。应用采用ArkUI框架开发&#xff0c;主要特点包括&#xff1a; 双模式学习系统&#xff1a…

LeetCode--38.外观数列

前言&#xff1a;之前我不是说&#xff0c;我后续可能会讲一下递归吗&#xff0c;现在它来了&#xff0c;这道题会用到回溯的方法&#xff0c;并且比较纯粹哦 解题思路&#xff1a; 1.获取信息&#xff1a;&#xff08;下面这些信息差不多是力扣上面的题目信息了&#xff0c;所…

服务器的安装与安全设置

1&#xff1a;安装操作系统 1、创建虚拟机Win49&#xff08;49为序号&#xff09;&#xff0c;并安装Windows Server 2019操作系统 参考配置&#xff1a;安装系统的分区大小为20GB&#xff0c;其余分区暂不划分&#xff0c; 文件系统格式为NTFS&#…

Sensodrive SensoJoint机器人力控关节模组抗振动+Sensodrive力反馈系统精准对接

Sensodrive成立于2003年&#xff0c;起源于德国航空航天中心&#xff08;DLR&#xff09;的LBR项目。公司由一批传感器技术专家创立&#xff0c;专注于高精度工业扭矩传感器的研发。凭借二十余年的技术积累&#xff0c;Sensodrive将DLR轻型机器人扭矩技术引入工业领域&#xff…

【AI实践】Mac一天熟悉AI模型智能体应用(百炼版)

25.6.29增加Gummy 实时/一句话语音识别25.6.28增加Qwen TTS本地音频和实时播报 背景 准备环境 MacOS M1电脑&#xff08;其他M系列芯片也可以&#xff09; 为了方便python的使用环境&#xff0c;使用Miniconda&#xff1a;下载链接&#xff1a;Download Anaconda Distribution…

WEB安全--Java安全--jsp webshell免杀1

1.1、BCEL ClassLoader 介绍&#xff08;仅适用于BCEL 6.0以下&#xff09;&#xff1a; BCEL&#xff08;Apache Commons BCEL™&#xff09;是一个用于分析、创建和操纵Java类文件的工具库&#xff1b;BCEL的类加载器在解析类名时会对ClassName中有$$BCEL$$标识的类做特殊处…

Valkey与Redis评估对比:开源替代方案的技术演进

#作者&#xff1a;朱雷 文章目录 1 概述1.1内存数据结构存储核心特性1.2主流内存数据结构存储设计与适用场景1.3目前主流内存数据结构存储对比 2 Valkey 说明2.1 哨兵架构设计2.2 集群架构设计2.3 valkey 使用企业和业内生态‌ 3 评估指标4 评估结果 1 概述 内存数据结构存储…

华为云Flexus+DeepSeek征文 | 基于华为云ModelArts Studio安装NoteGen AI笔记应用程序

华为云FlexusDeepSeek征文 | 基于华为云ModelArts Studio安装NoteGen AI笔记应用程序 引言一、ModelArts Studio平台介绍华为云ModelArts Studio简介ModelArts Studio主要特点 二、NoteGen介绍NoteGen简介主要特点 三、安装NoteGen工具下载NoteGen软件安装NoteGen工具 四、开通…

BUUCTF在线评测-练习场-WebCTF习题[BJDCTF2020]Easy MD51-flag获取、解析

解题思路 打开靶场&#xff0c;有个提交框&#xff0c;输入后url会出现我们提交的参数password http://a48577ed-9a1c-4751-aba0-ae99f1eb8143.node5.buuoj.cn:81/leveldo4.php?password123 查看源码并没用发现什么猫腻&#xff0c;抓包在响应头发现了猫腻 hint: select * …

面向对象三大特性深度解析:封装、继承与多态

面向对象三大特性深度解析&#xff1a;封装、继承与多态 思维导图概览 #mermaid-svg-v2u0XIzKotjyXYei {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-v2u0XIzKotjyXYei .error-icon{fill:#552222;}#mermaid-svg-v2…

mmap映射物理内存之三invalid cache

目录 流程设计 invalid 命令 内核态invalid 内核态invalid&#xff0c;用户态mmap物理地址 PAN机制 PAN机制历程 硬件支持 ARMv8.1-PAN 特性 Linux 内核的适配 软件模拟 PAN&#xff08;SW PAN&#xff09; 背景 Linux 的实现 总结 前述刷新cache的流程也同样可…

记忆化搜索(dfs+memo)无环有向图

这是一道可以当作板子的极简记忆化搜索 建立a 是邻接表&#xff0c;其中 a[x] 存储从节点 x 出发能到达的所有节点。 b[x] 记录从节点 x 出发的所有边的权重之和。根据数学原理&#xff0c;我们很容易发现&#xff0c;一个根&#xff08;起点&#xff09;的期望&#xff0c;等…

使用AI豆包写一个车辆信息管理页面

记录一个基本的车辆信息管理页面&#xff0c;由豆包撰写完成&#xff0c;只需要微调页面即可。 主要功能是车辆信息的查询、新增、编辑&#xff0c;项目用到了uniapp、vue3、ts、uni-ui、z-paging 页面效果如下&#xff1a; 以上界面均由豆包生成&#xff0c;完成度非常高&am…

《HarmonyOSNext应用防崩指南:30秒定位JS Crash的破案手册》

《HarmonyOSNext应用防崩指南&#xff1a;30秒定位JS Crash的破案手册》 ##Harmony OS Next ##Ark Ts ##教育 本文适用于教育科普行业进行学习&#xff0c;有错误之处请指出我会修改。 &#x1f4a5; 哇哦&#xff01;JS Crash崩溃日志完全解析手册 当你的应用突然闪退时&am…

阅读笔记(3) 单层网络:回归(下)

阅读笔记(3) 单层网络:回归(下) 该笔记是DataWhale组队学习计划&#xff08;共度AI新圣经&#xff1a;深度学习基础与概念&#xff09;的Task03 以下内容为个人理解&#xff0c;可能存在不准确或疏漏之处&#xff0c;请以教材为主。 1. 为什么书上要提到决策理论&#xff1f; …

Mac OS系统每次开机启动后,提示:输入密码来解锁磁盘“Data”,去除提示的解决方法

问题描述&#xff1a; Mac mini外接了一个磁盘&#xff08;EX_Mac&#xff09;为默认使用的系统盘&#xff0c;内置的硬盘&#xff08;Macintosh HD&#xff09;为Mac mini自带的系统盘 外置硬盘系统每次开机都会挂载内置磁盘&#xff0c;同时会提示需要输入密码来解锁磁盘“…

CSS Flex 布局中flex-shrink: 0使用

flex-shrink: 0 是 CSS Flexbox 布局中的一个关键属性&#xff0c;用于禁止弹性项目&#xff08;flex item&#xff09;在容器空间不足时被压缩。以下是详细解释和示例&#xff1a; 核心作用 当容器的可用空间小于所有弹性项目的总宽度&#xff08;或高度&#xff09;时&#…

WHERE 子句中使用子查询:深度解析与最佳实践

&#x1f50d; WHERE 子句中使用子查询&#xff1a;深度解析与最佳实践 在 WHERE 子句中使用子查询是 SQL 的高阶技巧&#xff0c;可实现动态条件过滤。以下是全面指南&#xff0c;涵盖语法、类型、陷阱及优化策略&#xff1a; &#x1f4dc; 一、基础语法结构 SELECT 列 FR…

从0到1:不文明现象随手拍小程序开发日记(一)

前期调研 不文明现象随手拍小程序&#xff1a;在城市的快速发展进程中&#xff0c;不文明现象时有发生&#xff0c;为了有效解决这一问题&#xff0c;提升城市文明程度&#xff0c; 市民若发现不文明行为&#xff0c;如乱扔垃圾、随地吐痰、破坏公共设施、违规停车等&#xff…