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.mzph.cn/web/11656.shtml

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

相关文章

探索大语言模型代理(Agent):研究背景、通用框架与未来展望

引言 近年来&#xff0c;随着人工智能技术的飞速发展&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;在智能代理&#xff08;Agent&#xff09;领域中的应用已成为研究的热点。这些代理不仅能够模拟人类的认知过程&#xff0c;还能在复杂的社会环…

CNN/TCN/LSTM/BiGRU-Attention到底哪个模型效果最好?注意力机制全家桶来啦!

​ 声明&#xff1a;文章是从本人公众号中复制而来&#xff0c;因此&#xff0c;想最新最快了解各类智能优化算法及其改进的朋友&#xff0c;可关注我的公众号&#xff1a;强盛机器学习&#xff0c;不定期会有很多免费代码分享~ 目录 数据介绍 效果展示 原理简介 代…

数字人解决方案——AniTalker声音驱动肖像生成生动多样的头部说话视频算法解析

1.概述 AniTalker是一款先进的AI驱动的动画生成工具&#xff0c;它超越了简单的嘴唇同步技术&#xff0c;能够精准捕捉并再现人物的面部表情、头部动作以及其他非言语的微妙动态。这不仅意味着AniTalker能够生成嘴型精准同步的视频&#xff0c;更重要的是&#xff0c;它还能够…

使用Dockerfile配置Springboot应用服务发布Docker镜像-16

创建Docker镜像 springboot-docker模块 这个应用可以随便找一个即可&#xff0c;这里不做详细描述了。 pom.xml 依赖版本可参考 springbootSeries 模块中pom.xml文件中的版本定义 <dependencies><dependency><groupId>com.alibaba.cloud</groupId>…

[数据集][图像分类]杂草分类数据集17509张9类别

数据集格式&#xff1a;仅仅包含jpg图片&#xff0c;每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数)&#xff1a;17509 分类类别数&#xff1a;9 类别名称:["chineseapple","lantana","negatives","parkinsonia","part…

48-Qt控件详解:Buttons Containers2

一 Group Box:组合框 #include "widget.h"#include<QGroupBox> #include<QRadioButton> #include<QPushButton> #include<QVBoxLayout>//可以在水平方向和垂直方向进行排列的控件&#xff0c;QHBoxLayout/QVBoxLayout #include <QGridLa…

解决宝塔Nginx和phpMyAdmin配置端口冲突问题

问题描述 在对基于宝塔面板的 Nginx 配置文件进行端口修改时&#xff0c;我注意到 phpMyAdmin 的端口配置似乎也随之发生了变化&#xff01; 解决方法 官方建议在处理 Nginx 配置时&#xff0c;应避免直接修改默认的配置文件&#xff0c;以确保系统的稳定性和简化后续的维护…

大数据可视化实验三——数据可视化工具使用

目录 一、实验目的... 1 二、实验环境... 1 三、实验内容... 1 1. 下载并安装Tableau软件.. 1 2. 使用HTML5绘制Canvas图形.. 2 3. 使用HTML5编写SVG 图形... 5 4. 使用R 语言编写可视化实例.. 7 四、总结与心得体会... 7 五、思考问题... 8 一、实验目的 1&#xff…

C++-Linux工程管理

1 Makefile和CMake实践 1.1 Makefile 参考 简介&#xff1a; Makefile是一种用于自动化构建和管理程序的工具。它通常用于编译源代码、链接对象文件以生成可执行文件或库文件。Makefile以文本文件的形式存在&#xff0c;其中包含了一系列规则和指令&#xff0c;用于描述程序的…

python数据分析——seaborn绘图1

参考资料&#xff1a;活用pandas库 matplotlib库是python的和兴绘图工具&#xff0c;而seaborn基于matplotlib创建&#xff0c;它为绘制统计图提供了更高级的接口&#xff0c;使得只用少量代码就能生成更美观、更复杂的可视化效果。 seaborn库和pandas以及其他pydata库&#xf…

OpenHarmony 实战开发——移植通信子系统

通信子系统目前涉及Wi-Fi和蓝牙适配&#xff0c;厂商应当根据芯片自身情况进行适配。 移植指导 Wi-Fi编译文件内容如下&#xff1a; 路径&#xff1a;“foundation/communication/wifi_lite/BUILD.gn” group("wifi") {deps [ "$ohos_board_adapter_dir/ha…

C++基础与深度解析 | 数组 | vector | string

文章目录 一、数组1.一维数组2.多维数组 二、vector三、string 一、数组 1.一维数组 在C中&#xff0c;数组用于存储具有相同类型和特定大小的元素集合。数组在内存中是连续存储的&#xff0c;并且支持通过索引快速访问元素。 数组的声明&#xff1a; 数组的声明指定了元素的…

【数据结构】数组循环队列的实现

队列&#xff08;Queue&#xff09;是一种特殊的线性数据结构&#xff0c;它遵循FIFO&#xff08;First In First Out&#xff0c;先入先出&#xff09;的原则。队列只允许在表的前端&#xff08;front&#xff09;进行删除操作&#xff0c;而在表的后端&#xff08;rear&#…

python下载及安装

1、python下载地址&#xff1a; Python Releases for Windows | Python.orgThe official home of the Python Programming Languagehttps://www.python.org/downloads/windows/ 2、python安装 &#xff08;1&#xff09; 直接点击下载后的可执行文件.exe &#xff08;2&…

Spring Boot项目怎么集成Gitee登录

一、背景 现在的越来越多的项目&#xff0c;需要集成第三方系统进行登录。今天我们以Spring Boot项目集成Gitee为例&#xff0c;演示一下怎么使用Oauth2协议&#xff0c;集成第三方系统登录。 不了解oauth2的&#xff0c;可以看我之前的文章。Ouath2是怎么实现在第三方应用认…

计算机毕业设计Python+Spark知识图谱课程推荐系统 课程预测系统 课程大数据 课程数据分析 课程大屏 mooc慕课推荐系统 大数据毕业设计

1 绪 论 1.1 课题研究背景 在线教育学习平台是学生用来进行校内或校外拓展课程学习的平台&#xff0c;平台需要具备在线视频观看&#xff0c;作业提交&#xff0c;形成性考核等功能。在学生学习的过程中&#xff0c;学校的管理者或负责教师需要了解学生的学习情况和学习状态&…

WWW服务器搭建(2)——Apache服务器配置与管理

一、Apache简介 1.1 关于Apache Apache HTTP Server&#xff08;简称Apache&#xff09;是Apache软件基金会的一个开放源码的Web服务器&#xff0c;可以在大多数计算机操作系统中运行&#xff0c;由于其跨平台和安全性被广泛使用&#xff0c;是最流行的Web服务器端软件之一。…

01-02-5

1、单链表中按位置查找 a.原理 通过传递的位置&#xff0c;返回该位置对应的地址&#xff0c;放到主函数定义的指针变量中。 我们认为位置从&#xff1a;有数据的节点开始计数 即如下结构&#xff1a; 查找位置&#xff0c;就是返回该位置对应的空间地址。 b.代码说明 Ⅰ…

H5嵌入原生----兼容安卓与ios

主要分UI展示&#xff0c;键盘&#xff0c;输入框等等。解决bug最苦恼的问题不是没有解决方案&#xff0c;而是你没有找到真正的原因。再就是现象难以重现&#xff0c;每次都要发布代码&#xff0c;然后到手机app中去测试&#xff0c;模拟。这些地方会耗费大量的精力。 一、UI…

【软设】常见易错题汇总

目录 计算机系统基础 程序语言基础 数据结构 算法设计与分析 计算机网络与信息安全 软件工程基础 开发方法&#xff08;结构化与面向对象&#xff09; 数据库 操作系统 知识产权相关的法律法规 &#x1f92f;&#x1f92f;&#x1f92f;&#x1f92f;&#x1f92f;&#x1f9…