Vue的学习 —— <vue响应式基础>

目录

前言

正文

单文件组件

什么是单文件组件

单文件组件使用方法

数据绑定

什么是数据绑定

数据绑定的使用方法

响应式数据绑定

响应式数据绑定的使用方法

ref() 函数

reactive()函数

toRef()函数

toRefs()函数

案例练习


前言

Vue.js 以其高效的数据绑定和视图更新机制广受开发者喜爱。这一特性主要依赖于其独特的响应式系统设计,它能够实时监测数据变化并自动驱动相应的视图更新。简单来说,就是当数据发生变化时,依赖该数据的视图会自动进行更新这种“响应”是通过在初始化阶段对数据对象属性进行深度观测和转换来实现的。

正文

单文件组件

什么是单文件组件

在第二章中,我们使用Vite创建了一个Vue项目,并且注意到目录结构中包含了一些扩展名为.vue的文件。这些.vue文件实际上是用来定义Vue的单文件组件。在Vue中,单文件组件是一种特殊的文件格式,用于构建用户界面。一个.vue文件可以看作是一个独立的组件单元,它包含了组件的模板、脚本和样式。这种格式使得组件的代码更加清晰和易于维护。在每个.vue文件中,你可以编写HTML结构作为模板部分,JavaScript代码作为脚本部分以及CSS样式作为样式部分

通过使用单文件组件,可以将组件的逻辑、结构和样式封装在一起,使得组件的复用和组织更加方便。这有助于提高代码的可读性和可维护性,以及加快开发速度。

每个单文件组件由模板、样式和逻辑3个部分构成:

  1. 模板:模板用于搭建当前组件的DOM结构,其代码写在<template>标签中

  2. 样式:样式是指通过CSS代码为当前组件设置样式,其代码写在<style>标签中

  3. 逻辑:逻辑是指通过JavaScript代码处理组件的数据与业务,其代码写在<script>标签中

下面是一个单文件组件的代码结构:

<template>
<!-- 此处编写组件的结构,HTML代码 -->
</template>
<script>
/* 此处编写组件的JavaScript代码 */
</script>
<style>
/* 此处编写组件的样式 */
</style>

单文件组件使用方法

下面演示如何使用单文件组件:

  1. 在D:\webProject目录下创建Demo02文件夹,在cmd命令行中使用Vite创建一个名为vue-demo项目用于存放本案例的演示代码

  2. 项目创建完成后,执行如下命令进入项目目录并启动项目:

    cd D:\webProject\Demo02\vue-demo
    yarn -i 
    yarn dev
  3. 使用VS Code编辑器打开D:\webProject\Demo02\vue-demo项目目录

  4. 将项目目录下src\style.css文件中的样式代码全部删除,从而避免项目创建时自带的样式代码影响本案例的实现效果

  5. 创建src\components\SingleFileComponent.vue文件,该文件是名为singleFileComponent的单文件组件,并写入如下代码:

    <template><div id="singleFileComponent">我是一个单文件组件</div>
    </template>
    <style>
    #singleFileComponent {font-size: 22px;font-weight: bold;
    }
    </style>
  6. 修改src\main.js文件,切换页面中显示的组件并取消在main.js文件中引入第四步删除的样式文件

    // import './style.css' 删除这一行
    import App from './components/Demo.vue'
  7. 保存上述代码后,在浏览器中访问http://127.0.0.1:5173/,SingleFileComponent组件的页面效果如下图所示

数据绑定

什么是数据绑定

Vue通过数据绑定实现了数据与页面相分离,从而实现了数据驱动视图的效果。即将页面中的数据分离出来,放到组件的<script>标签中,通过程序操作数据,并且当数据改变时,页面会自动发生改变。

数据绑定分为定义数据和输出数据:

  1. 定义数据:由于数据和页面是分离的,在实现数据显示之前,需要先在<script>标签中定义组件所需的数据,伪代码如下:

    <script>
    export default {setup() {return {数据名: 数据值,……}}
    }
    </script>
  2. 输出数据:Vue为开发者提供了Mustache语法(又称为双大括号语法),将数据输出到页面中,伪代码如下:

    <template><div>{{ 数据名 }}<!-- 在Mustache语法中还可以将表达式的值作为输出内容。表达式的值可以是字符串、数字等类型,代码如下 -->{{ 数据名 === '张' ? '张先生' : 数据名}}</div>
    </template>

为了让代码更简洁,Vue 3提供了setup语法糖(Syntactic Sugar),使用它可以简化上述语法,提高开发效率,使用setup语法糖来定义数据的语法格式如下:

<script setup>
const 数据名 = 数据值
</script>

数据绑定的使用方法

下面演示数据绑定的使用方法:

  1. 创建src\components\DataBind.vue文件用于存放演示代码
  2.  定义message数据,并在模板中输出,DataBind.vue文件代码如下
<template><!-- 输出数据 -->{{ message }}
</template>
<script setup>
// 定义数据
const message = "操千曲而后晓声,观千剑而后识器"
</script>
<style>
</style>

3. 修改src\main.js文件,切换页面中显示的组件

import App from './components/DataBind.vue'

4. 保存代码,使用浏览器访问http://127.0.0.1:5173/,最终效果如下图所示:

响应式数据绑定

响应式数据绑定是Vue开发中一种重要的技术,用于实现页面数据的实时更新。当数据发生变化时,页面能够自动更新,而不需要手动重新渲染,如果想要实现页面中数据的更新,则需要进行响应式数据绑定,也就是将数据定义成响应式数据。下面是关于响应式数据绑定的详细解释:

  1. 数据与视图的同步:在Vue项目开发中,通常会有数据和视图两个部分。数据存储在变量中,而视图是数据的呈现。响应式数据绑定能够确保当数据发生变化时,视图会自动更新。

  2. 依赖关系:要实现数据与视图的同步,我们需要明确数据与视图之间的依赖关系。当数据发生变化时,视图需要重新渲染,反之,当视图因为某些操作(如用户输入)发生变化时,也需要能够反映到数据上。

总的来说,响应式数据绑定是前端开发中的一个重要概念,它使得开发者能够更加专注于业务逻辑的实现,而不需要过多关注数据的同步问题。

Vue为开发者提供了以下四个函数用来定义响应式数据:

  1. ref()函数:用于将数据转换成响应式数据,其参数为数据,返回值为转换后的响应式数据。使用ref()函数操作响应式数据的伪代码如下:

    // 定义响应式数据
    响应式数据 = ref(数据)
    // 修改响应式数据
    响应式数据.value = 新的值
  2. reactive()函数:用于创建一个响应式对象或数组,将普通的对象或数组作为参数传给该函数即可。使用reactive()函数操作响应式数据的伪代码如下:

    // 定义响应式对象或数组
    响应式对象或数组 = reactive(普通的对象或数组) 
    // 修改响应式对象
    响应式对象.属性 = 新值
    // 修改响应式数组
    响应式数组[index] = 新值
  3. toRef()函数:toRef()函数用于将响应式对象中的单个属性转换为响应式数据,使用toRef()函数操作响应式数据的伪代码如下:

    响应式数据 = toRef(响应式对象, '属性名')
  4. toRefs()函数:

响应式数据绑定的使用方法

ref() 函数
  1. 创建src\components\RefDemo.vue文件用于存放演示代码,写入如下代码:

    <template><!-- 输出message响应式数据 -->{{ message }}
    </template>
    <script setup>
    import { ref } from 'vue';
    ​
    const message = ref("不积跬步,无以至千里。不积小流,无以成江河")
    // 在页面加载完成后3秒修改响应式数据内容
    setTimeout(() => message.value = '会当凌绝顶,一览众山小' , 3000)
    ​
    </script>
    <style>
    </style>
  2. 修改src\main.js文件,切换页面中显示的组件

    import App from './components/RefDemo.vue'
  3. 保存代码,使用浏览器访问http://127.0.0.1:5173/,页面打开后初始效果如下图所示:

  4. 等待3秒后的页面效果如下图所示:

reactive()函数
  1. 创建src\components\ReactiveDemo.vue文件用于存放演示代码,写入如下代码:

    <template>{{ obj.message }}
    </template>
    <script setup>
    import { reactive } from 'vue'
    const obj = reactive({ message: '穷且益坚,不坠青云之志' })
    ​
    setTimeout(() => obj.message = '人有逆天之时,天无绝人之路', 3000)
    </script>
  2. 修改src\main.js文件,切换页面中显示的组件

    import App from './components/ReactiveDemo.vue'
  3. 保存代码,使用浏览器访问http://127.0.0.1:5173/,页面打开后初始效果如下图所示:

  4. 等待3秒后的页面效果如下图所示:

toRef()函数
  1. 创建src\components\ToRefDemo.vue文件用于存放演示代码,写入如下代码:

    <template><div>message的值:{{ message }}</div><div>obj.message的值:{{ obj.message }}</div>
    </template>
    <script setup>
    import { reactive, toRef } from 'vue'
    ​
    const obj = reactive({ message: '三更灯火五更鸡,正是男儿读书时' })
    ​
    const message = toRef(obj, 'message')
    // 延时3秒修改响应式对象属性
    setTimeout(() => message.value = '咬定青山不放松,立根原在破岩中', 3000)
    ​
    </script>
  2. 修改src\main.js文件,切换页面中显示的组件

    import App from './components/ToRefDemo.vue'
  3. 保存代码,使用浏览器访问http://127.0.0.1:5173/,页面打开后初始效果如下图所示:

  4. 等待3秒后的页面效果如下图所示:

toRefs()函数
  1. 创建src\components\ToRefsDemo.vue文件用于存放演示代码,写入如下代码:

    <template><div>message的值:{{ message }}</div><div>obj.message的值:{{ obj.message }}</div>
    </template>
    <script setup>
    import { reactive, toRefs } from 'vue'
    ​
    const obj = reactive({ message: '盛年不重来,一日难再晨' })
    ​
    let { message } = toRefs(obj)
    ​
    setTimeout(() => message.value = '及时当勉励,岁月不待人', 3000)
    </script>
  2. 修改src\main.js文件,切换页面中显示的组件

    import App from './components/ToRefsDemo.vue'
  3. 保存代码,使用浏览器访问http://127.0.0.1:5173/,页面打开后初始效果如下图所示:

  4. 保存代码,使用浏览器访问http://127.0.0.1:5173/,页面打开后初始效果如下图所示:

案例练习

结合Vue3组合式API,在页面中实时显示当前时间,时间显示年-月-日 时:分:秒.毫秒。

案例实现:

<template><div>{{ current }}</div>
</template>
<style></style>
<script setup>
import { ref,reactive,onMounted } from 'vue'
const current = ref('')
const flush = () => {let now = new Date();let hours = now.getHours().toString().padStart(2, '0');let minutes = now.getMinutes().toString().padStart(2, '0');let seconds = now.getSeconds().toString().padStart(2, '0');let milliseconds = now.getMilliseconds().toString().padStart(3, '0');// 格式化为 "yyyy-MM-dd HH:mm:ss.sss"let formattedTime = `${now.getFullYear()}-${now.getMonth()+1}-${now.getDate()} ${hours}:${minutes}:${seconds}.${milliseconds}`;current.value = formattedTime
}
setInterval(flush,1)
</script>

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

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

相关文章

Golang | Leetcode Golang题解之第84题柱状图中最大的矩形

题目&#xff1a; 题解&#xff1a; func largestRectangleArea(heights []int) int {n : len(heights)left, right : make([]int, n), make([]int, n)for i : 0; i < n; i {right[i] n}mono_stack : []int{}for i : 0; i < n; i {for len(mono_stack) > 0 &&am…

ESP32重要库示例详解(三):按键之avdweb_Switch库

在Arduino开发中&#xff0c;我们经常需要处理按钮和开关的输入。avdweb_Switch库就是为了简化这一任务&#xff0c;提供了一个优雅且高效的事件处理方式。本文将通过一个实际示例&#xff0c;介绍该库的主要特性和用法。 导入库 在Arduino IDE导入avdweb_Switch库的步骤如下…

黑盒测试中的边界值分析

黑盒测试是一种基于需求和规格的测试方法&#xff0c;它主要关注软件系统输出的正确性和完整性&#xff0c;而不考虑内部代码的实现方式。在黑盒测试中&#xff0c;边界值分析是一种重要的测试技术&#xff0c;它可以帮助测试人员有效地发现输入和输出的问题。本文将从什么是边…

AI翻唱+视频剪辑全流程实战

目录 一、AI翻唱之模型训练 &#xff08;1&#xff09;模型部署 &#xff08;2&#xff09;数据集制作——搜集素材 &#xff08;3&#xff09;数据集制作——提升音频质量 方法一&#xff1a;使用RVC提供的音频处理功能。 方法二&#xff1a;可以使用音频剪辑工具Ad…

AI时代的网络安全战:以智取胜,守护数字安宁

在数字化浪潮的推动下&#xff0c;我们的生活和工作日益离不开互联网。然而&#xff0c;随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;网络安全问题也日益凸显。美国联邦调查局&#xff08;FBI&#xff09;的一则警报如同一记重锤&#xff0c;敲响了我们对…

大米自动化生产线揭秘:包装设备选择与维护之道

在现代化的大米生产过程中&#xff0c;自动化生产线的应用已经越来越广泛。其中&#xff0c;包装设备作为生产线上的重要一环&#xff0c;其选择与维护直接关系到产品的质量和生产效率。与星派一起探讨大米自动化生产线中包装设备的选择与维护之道。 一、包装设备的选择 在选择…

工厂模式应用实例

引言 设计模式概念 设计模式&#xff08;Design Pattern&#xff09;的官方概念可以表述为&#xff1a;在软件设计中&#xff0c;设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。它是针对特定问题或特定场景的解决方案&#xff0c;是一种经过…

单元测试之TestNG知识点总结及代码示例

TestNG 是一个测试框架&#xff0c;用于自动化测试 Java 和 Scala 应用程序&#xff0c;它是 JUnit 和 NUnit 的一个强大替代品。TestNG 支持数据驱动测试、参数化测试、测试套件、依赖管理、多线程测试等特性。TestNG官网&#xff1a;TestNG Documentation 目录 1.TestNG 基…

虹科Pico汽车示波器 | 免拆诊断案例 | 2010款凯迪拉克SRX车发动机无法起动

故障现象 一辆2010款凯迪拉克SRX车&#xff0c;搭载LF1发动机&#xff0c;累计行驶里程约为14.3万km。该车因正时链条断裂导致气门顶弯&#xff0c;大修发动机后试车&#xff0c;起动机运转有力&#xff0c;但发动机没有着机迹象&#xff1b;多起动几次&#xff0c;火花塞会变…

网络编程:服务器模型-并发服务器-多进程

并发服务器概念&#xff1a; 并发服务器同一时刻可以处理多个客户机的请求 设计思路&#xff1a; 并发服务器是在循环服务器基础上优化过来的 &#xff08;1&#xff09;每连接一个客户机&#xff0c;服务器立马创建子进程或者子线程来跟新的客户机通信 &#xff08;accept之后…

QT--4

QT 使用定时器完成闹钟 #include "widget.h" #include "ui_widget.h"void Widget::timestart() {timer.start(1000); }void Widget::timeend() {timer.stop(); }Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(t…

分类预测 | Matlab实现DBO-CNN-SVM蜣螂算法优化卷积神经网络结合支持向量机多特征分类预测

分类预测 | Matlab实现DBO-CNN-SVM蜣螂算法优化卷积神经网络结合支持向量机多特征分类预测 目录 分类预测 | Matlab实现DBO-CNN-SVM蜣螂算法优化卷积神经网络结合支持向量机多特征分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现DBO-CNN-SVM蜣螂算法…

【卫星影像三维重建-全流程代码实现】点云Mesh重构

点云—>Mesh模型 1.介绍1.1 背景1.2 效果示意 2 算法实现2.1 依赖库2.2 实验数据2.3 代码实现2.4 实验效果 3.总结 1.介绍 1.1 背景 &#xff08;1&#xff09;本文主要内容是将三维点云&#xff08;离散的三维点&#xff09;进行表面重建生成Mesh网格&#xff0c;之前有篇…

Middle for Mac:简洁高效的文本编辑软件

追求简洁与高效&#xff1f;Middle for Mac将是您文本编辑的最佳选择。这款Mac平台上的文本编辑器&#xff0c;以其独特的魅力和实用的功能&#xff0c;赢得了众多用户的喜爱。 Middle注重用户体验&#xff0c;采用简洁直观的界面设计&#xff0c;让您能够迅速上手并享受高效的…

巩固学习6

正则表达式 又称规则表达式&#xff0c;Regular Expression&#xff0c;在代码中常简写为regex、regexp或RE&#xff09;&#xff0c;是一种文本模式&#xff0c;包括普通字符&#xff08;例如&#xff0c;a到z之间的字母&#xff09;和特殊字符&#xff08;称为“元字符”&…

今天开发了一款软件,我竟然只用敲了一个字母(文末揭晓)

软件课题&#xff1a;Python实现打印100内数学试题软件及开发过程 一、需求管理&#xff1a; 1.实现语言&#xff1a;Python 2.打印纸张&#xff1a;A4 3.铺满整张纸 4.打包成exe 先看效果&#xff1a; 1. 2.电脑打印预览 3.打印到A4纸效果&#xff08;晚上拍的&#x…

【实践】使用vscode来debug go程序的尝鲜

配置 首先&#xff0c;当然得配置好vscode 的go环境&#xff0c; 装个go插件就基本满足了 配置 launch.json, 可以配置多个环境的程序启动参数&#xff08;很友好&#xff09; {"version": "0.2.0","configurations": [{"name": &…

享元模式详解

享元模式 1 概述 定义&#xff1a; ​ 运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似对象的开销&#xff0c;从而提高系统资源的利用率。 2 结构 享元&#xff08;Flyweight &#xff09;模式中存…

linux学习:视频输入+V4L2

目录 V4L2 视频采集流程 代码例子 核心命令字和结构体 VIDIOC_ENUM_FMT VIDIOC_G_FMT / VIDIOC_S_FMT / VIDIOC_TRY_FM VIDIOC_REQBUFS VIDIOC_QUERYBUF VIDIOC_QBUF /VIDIOC_DQBUF VIDIOC_STREAMON / VIDIOC_STREAMOFF V4L2 是 Linux 处理视频的最新标准代码模块&…

力扣HOT100 - 45. 跳跃游戏 II

解题思路&#xff1a; 贪心 class Solution {public int jump(int[] nums) {int end 0;int maxPosition 0;int steps 0;for (int i 0; i < nums.length - 1; i) {maxPosition Math.max(maxPosition, i nums[i]);if (i end) {end maxPosition;steps;}}return steps;…