百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Vue3 快速入门系列教程(一),什么是 Vue?

myzbx 2025-02-03 14:11 24 浏览

前言

本系列教程写给从事前端开发刚刚入门的小伙伴,以及即将从事前端开发的朋友们,不会涉及很深的技术原理,以“会使用”为目的。

初次写作,文章可能让您不满意,请见谅。

如果出现有关技术知识方面的错误,希望您可以指出,让我与您共同进步!

我真诚的希望我的文章能够帮到您。

正文

Vue 是一款用于构建用户界面的 JavaScript 框架。它是渐进式框架,基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。

以上定义有3个地方需要留意:

渐进式框架:是指 Vue 具有很好的包容性,当你正在开发一个项目时,并非只能使用 Vue 这一项技术,你可以将你熟悉的技术集成到项目中。

声明式:就像我们在 HTML 中用 button 声明一个按钮一样,Vue 同样提供了一套类似 HTML 模板语法,它拓展了标准的 HTML 模板声明方式,使得我们可以使用“声明式”地方式描述最终输出的 HTML 和 JavaScript 状态之间的关系。这是 Vue 的一个核心功能。例如以下代码,很好的描述了该按钮“自增”意图的 JS 逻辑以及触发方式:

<button @click="count++">
  {{ count }}
</button>

组件化编程模型:Vue 将一个功能或页面的 HTML、CSS 和 JavaScript 代码合并到一起,这被成为组件,可以被其他组件或页面引入而重复利用。通常每个“.vue”文件作为一个组件,组件可以简单到由一个按钮组成,也可以复杂到由一组功能或页面组成。

我们工作中都是以“单文件组件”形式进行编码,本系列教程的代码示例也是采用这种方式。例如一个简单的“点赞组件”结构:

<template>
<div class="good">
<!-- 模板中的响应式变量不需要 .value -->
<span class="nums">获赞:{{goodNums}}</span>
<span>获赞 - 非响应式:{{testNums}}</span>
<span>
    <button @click="goodNumsAdd">点赞</button>
    <button @click="goodNums++">点赞的另一种触发方式</button>
    <button @click="testNumsAdd">点赞 - 非响应式</button>
</span>
</div>
</template>
<script setup>
import { ref } from 'vue'
const goodNums = ref(0)
const goodNumsAdd = () => {
    // 注意响应式变量在 JS 中要用 .value 
    goodNums.value++
}
let testNums = 0;
const testNumsAdd = () => {
    testNums++
    console.log('我触发了,值:' + testNums)
}
</script>
<style scoped>
.nums {
    color: red;
}
</style>


以上代码是 Vue 的一种书写方式,也是推荐的一种方式,有几点需要留意:

组件:一个组件由 template、script、style 标签组成。

<template>模板(视图)</template>
<script setup>
  // setup 属性开启组合式 API
</script>
<style scoped>
  /* scoped 属性指的是样式为该组件独享 */
</style>

组合式 API:<script setup> 是组合式 API 的使用方式,在开发中主要使用这种方式,本系列教程的代码示例也将采用这种方式。

<script setup>
  // setup 属性开启组合式 API
</script>

所谓组合式 API,可以简单理解成“把要实现的一个功能中用到的变量和函数放在一起”,这样的设计优势主要体现在代码的逻辑清晰、利于集中管理,例如下面代码中的“goodNums”和“testNums”。

<script setup>
import { ref } from 'vue'
// goodNums 响应式变量和处理方法放到一起
const goodNums = ref(0)
const goodNumsAdd = () => {
    // JS 中的响应式变量需要 .value
    goodNums.value++
}

// testNums 变量和处理方法放在一起
let testNums = 0; // 我也可以在模板中直接使用
const testNumsAdd = () => {
    testNums++
    console.log('我触发了,值:' + testNums)
}

// more...
// 如果有很多的功能,组合式 API 对代码的集中管理是很有优势的
</script>

组合式 API 还有一个特点:模板中可以直接使用 <script> 标签中声明的顶级变量和函数(指的是非函数中定义的变量和函数)。

JS 代码中使用响应式变量要用 .value,模板中不需要加 .value。

<template>
  <!-- 模板中直接使用响应式变量,但不需要 .value -->
  {{ goodNums }}
  <!-- 模板中直接使用非响应式变量 -->
  {{testNums}}
  <!-- 模板中直接使用 goodNumsAdd 方法 -->
  <button @click="goodNumsAdd">点赞</button>
</template>

如需“声明式”API 风格,请参阅 Vue 官方文档。

样式:<style scoped> 中的 scoped 代表 style 中的样式只针对该组件有效,这就意味着上面代码中的 class .nums 在别的组件中也被定义了,则它们的样式也不会互相干扰;

注意观察上面代码中的前两个按钮和第三个按钮的区别,前两个按钮点击后,模板中的“获赞”数字会出现变化,而且还是自增显示,这就是 Vue 的另一个核心功能“响应式”,Vue 会自动跟踪 JavaScript 状态并在其发生变化时响应式地更新 DOM,也可以简单的理解成:“数据发生了变化,页面就也跟着发生了变化,而无需手动刷新页面”。

const goodNums = ref(0) // 响应式,我变了,页面包含我的地方就会变了
let testNums = 0 // 不是响应式的,我变了,页面也不会改变

相反,第三个按钮点击后,即使是变量值发生变化,模板也不会更新,所以看不到“即时”的显示效果,因为它不是响应式的变量。

随后再点击前两个按钮中的任意一个,由于触发了视图更新,所以“获赞-非响应式”的值从最初的值立刻更新成最新值,且无自增显示效果,之前点击了几次“第三”个按钮,值就是几(多点击几次按钮观察结果)。

把一个变量变成响应式的,暂时记住“把它的初始值放到 ref() 函数的参数中”即可。

相关推荐

使用 Siemens Teamcenter Digital Reality Viewer 打造逼真的数字孪生

现代产品通常由数百万个部件组成,需要复杂的设计和协作。工业世界在管理复杂性方面面临重大挑战,传统的可视化工具无法渲染这些大型的多CAD组件,从而无法充分利用数字孪生的优势。为了解决这些难题,西门子...

如何在JavaScript中实现数字输入框的范围限制?

在JavaScript语言中,实现数字输入框的范围限制可以通过多种方式实现,最常见的方式是利用JavaScript的事件监听机制,和通过JavaScript的条件判断语句来实现范围限制。以...

2.3.8.J速算24点终极挑战(速算24点题目及答案)

各位数学高手、脑力达人,今天给大家带来一道超烧脑的**24点挑战**!**数字:2、3、8、J(J=11规则很简单:**用加减乘除和括号,把四个数字组合成24!每个数字只能用一次!****看起...

分布式系统进阶二十一之短链接生成原理

前言短链接(ShortURL)是一种通过缩短网页链接长度来方便分享的技术。相比于传统的长链接,短链接更简洁明了,更易于在社交媒体等平台上分享和传播。在本文中,我们将会详细解释短链接的定义、作用及其构...

一、SpringBoo中Mybatis多数据源动态切换

我们以一个实例来详细说明一下如何在SpringBoot中动态切换MyBatis的数据源。一、需求1、用户可以界面新增数据源相关信息,提交后,保存到数据库2、保存后的数据源需要动态生效,并且可以由用户动...

「JS 逆向百例」层层嵌套!某加速商城 RSA 加密

声明本文章中所有内容仅供学习交流,敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!逆向目标目标:某加速商城登录接口主页:a...

Spring Data Jpa 介绍和详细入门案例搭建

1.SpringDataJPA的概念在介绍SpringDataJPA的时候,我们首先认识下Hibernate。Hibernate是数据访问解决技术的绝对霸主,使用O/R映射(Object-Re...

SpringBoot 开发 Web 系统,快速入门指南!

01、背景介绍在之前的文章中,我们简单的介绍了SpringBoot项目的创建过程,了解了SpringBoot开箱即用的特性,本篇文章接着上篇的内容继续介绍SpringBoot用于we...

Nacos3.0重磅来袭!全面拥抱AI,单机及集群模式安装详细教程!

之前和大家分享过JDK17的多版本管理及详细安装过程,然后在项目升级完jdk17后又发现之前的注册和配置中心nacos又用不了,原因是之前的nacos1.3版本的,版本太老了,已经无法适配当前新的JD...

golang语言的魅力精华之玩转通道channel 值得你反复阅读100遍

通道用例大全在阅读本文之前,请先阅读通道一文。那篇文章详细地解释了通道类型和通道值,以及各种通道操作的规则细节。一个Go新手程序员可能需要反复多次阅读那篇文章和当前这篇文章来精通Go通道编程。本文...

2小时快速搭建一个高可用的IM系统

“笔者2019年参加了一次Gopher大会,有幸听探探的架构师分享了他们2019年微服务化的过程。图片来自Pexels本文快速搭建的IM系统也是使用Go语言来快速实现的,这里先和...

分库分表以后,如何管理几万张分片表?

大家好,我是小富~ShardingSphere实现分库分表,如何管理分布在不同数据库实例中的成千上万张分片表?上边的问题是之前有个小伙伴看了我的分库分表的文章,私下咨询我的,看到他的提问我第一感觉就是...

Spring Boot JDBC 与 JdbcTemplate 全面指南(万字保姆级教程)

一、SpringBootJDBC基础1.1JDBC简介与演进JDBC(JavaDatabaseConnectivity)是Java语言中用来规范客户端程序如何访问数据库的应用程序...

Flink SQL 知其所以然(六)| 维表 join 的性能优化之路(上)

废话不多说,咱们先直接上本文的目录和结论,小伙伴可以先看结论快速了解博主期望本文能给小伙伴们带来什么帮助:背景及应用场景介绍:博主期望你能了解到,flinksql提供了轻松访问外部存储的loo...

大数据Hadoop之——Flink Table API 和 SQL(单机Kafka)

一、TableAPI和FlinkSQL是什么TableAPI和SQL集成在同一套API中。这套API的核心概念是Table,用作查询的输入和输出,这套API都是批处理和...