Vue背景介绍+声明式渲染+数据响应式

news2025/4/1 23:27:05

一、Vue背景

1. 为什么学Vue

1.前后端开发就业必备技能
2.岗位多,绝⼤互联⽹公司都在使⽤Vue,还可以助⼒SpringBoot、C++等项⽬开发
3.提⾼开发效率
更少的时间,干更多的活,提高项目开发速度
原生JS做法

Vue做法

总而言之: 使用Vue能够赋能、提升就业竞争、做出更优质的项目

2. 什么是Vue

Vue 是一套 构建用户界面 渐进式 JavaScript 框架

Vue官网: https://cn.vuejs.org/

2.1 什么是构建用户界面

基于数据生成标签结构, 配合CSS样式, 可以渲染出好看的用户界面(UI)

2.2 什么是渐进式

循序渐进的学, 学多少用多少

局部改造: Vue 的部分功能

整站开发: Vue3 + VueRouter + Pinia + 工程化 + 模块化

2.3 什么是框架

框架: 一种规则, 学习 Vue 就是学习语法, 运用规则的阶段, 它是程序员必须遵守的规则/规范

3. Vue 的学习内容

数据渲染: 插值+指令+计算属性+监听器...

组件及组件化: 生命周期+组件+组件化(开发大型网站,可以分成一小块一小块进行局部开发)+组件通信+插槽...
路由: 配置+跳转+传参+嵌套+守卫...

状态管理: Pinia  不同的页面共享数据,而Pinia就可以管理共享的数据

ElementPlus: 核心组件 Form, Table, Dialog, Menu..

阶段实战: Vue3全家桶+ElementPlus.

 4. 准备Vue代码编写环境

4.1 安装VSCode

直接去官网进行下载: Visual Studio Code - Code Editing. Redefined

4.2 必备插件

1. Vue-Offical

◦ 提供 Vue ⽂件的语法⾼亮

◦ ⽀持 Vue ⽂件的智能感知和⾃动完成

◦ 提供了 Vue ⽂件的格式化⼯具

2. Vue 3 Snippets

◦ 提供 Vue 3 相关的代码⽚段,⽅便快速输⼊常⻅代码结构

3. Path Intellisense

◦ 路径⾃动补全

4. Auto Import

◦ ⾃动导⼊插件,可帮助⾃动完成和⾃动导⼊模块

5. Auto Close Tag

◦ ⾃动闭合HTML标签

6. Auto Rename Tag

◦ ⾃动重命名HTML标签。

 

4.3 Vue代码写哪里?

传统开发模式:基于html⽂件开发Vue,类似jQuery的使⽤, <script src="vue.js"></script>

⼯程化开发⽅式: 在 构建⼯具(Vite/Webpack 等)环境下开发Vue, 这是最推荐的、也是企业采⽤的⽅式

总结: 

1. 传统开发⽅式,直接⽤script引⼊vue.js⽂件

2. 在⼯程化环境下,借助Vite对Vue代码进⾏打包

我们先用传统方式来上手, 后续再用工程化 

二、声明式渲染

1. 编写第一个 Hello Word 程序

1> 引入Vue3的源代码(本地或者在线)

<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>

2> 准备容器 把Hello Word 渲染到div里面

<div id="app">
</div>

3> 创建应用并提供数据

<script>
        // 3. 创建 vue3 应用并提供数据
        // console.log(Vue) 可以查看Vue的方法
        Vue.createApp({
            //vue3的入口函数
            setup() {
                const msg = 'Hello World!'
                return {
                    // msg: msg
                    //简写
                    msg
                }
            }
        }).mount('#app')//告诉程序是渲染到哪个div里面, 此时是把内容渲染到 id = app的 容器里面
    </script>

4> 渲染数据 {{ 数据名 }}

<div id="app">
<h1>{{ msg }}</h1>
</div>

具体的流程: 根据mount()指定数据放在哪个容器里面

 完整代码:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <!-- 1. 引入 vue3 源代码 -->
    <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
    <!-- 2. 准备容器 -->
    <div id="app">
        <!--4. 渲染数据  -->
        {{ msg }}
    </div>
    <div id="another">
        {{ msg }}
    </div>
    <script>
        // 3. 创建 vue3 应用并提供数据
        // console.log(Vue) 可以查看Vue的方法
        Vue.createApp({
            //vue3的入口函数
            setup() {
                const msg = 'Hello World!'
                return {
                    // msg: msg
                    //简写
                    msg
                }
            }
        }).mount('#app')//告诉程序是渲染到哪个div里面, 此时是把内容渲染到 id = app的 容器里面
    </script>
</body>

</html>

2. setup函数

setup函数

1> vue3特有的, 也是 vue3 代码编写的入口/起点

2> 在标签中用到的数据或函数, 需要在 setup 函数中申明并返回

3> setup中的 this 不指向 Vue实例, 并且在setup中也不会用到this

3. 插值表达式

声明式渲染: 又叫胡子语法, 也叫做插值表达式

语法: {{ 表达式 }}

作用: 把表达式的结果展示/渲染到 标签中        

表达式: 任何有结果的运算或者操作都属于表达式, js常见表达式: 

1> 变量名/字面量

2> 对象.属性名

3> 三元运算/算数运算等

4> 函数/方法的调用

代码演示

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
    <div id="app">
        <!-- 调用数据 -->
        <!-- 1. 变量名 -->
        <h1>{{ msg }}</h1>
        <!-- 2. 对象.属性 -->
        <p>
            我叫{{ obj.name }},今年{{ obj.age }}
        </p>
        <!-- 3. 三元表达式 -->
        <p> {{ obj.age > 18 ? '已成年' : '未成年' }}</p>
        <!-- 4. 算数运算 -->
        <p>明年我就{{ obj.age +1 }}了</p>
        <!-- 5. 函数的调用 -->
        <p>fn返回值{{ fn() }}</p>
        <!-- 6. 方法的调用 -->
        <p>{{ msg }}由{{ msg.split(' ').length }}个单词组成</p>
    </div>
    <script>
        Vue.createApp({
            setup() {
                //定义变量
                const msg = "hehihei xiao"
                //定义对象
                const obj = {
                    name: 'xiaobai',
                    age: 13
                }
                //定义函数/方法
                const fn = () => {
                    return 666
                }
                //把数据返回给容器
                return {
                    msg,//返回变量
                    obj,//返回对象
                    fn//返回函数
                }
            }
        }).mount('#app')
    </script>
</body>

</html>

 数据传递过程

三、数据响应式

1. 安装Vue开发者工具(调试用)

直接在这里下载: https://chrome.zzzmh.cn/index

然后在Vue的拓展里面打开开发者模式, 把crx文件直接拖进去,点击详情, 开启允许访问文件网站

最后运行我们的vue代码,然后打开开发者工具, 看见vue就说明成功

2. 什么是数据响应式

数据响应式: 数据变了, 视图就会跟着变

数据: 在setup里面的就是数据

视图: HTML标签就是视图

数据变了, DOM就会变

默认在setuo里面声明的数据不具备响应式特性, 如果要具备的话就要使用 reactive 和 ref 函数 => 实现数据响应式

3. 响应式函数 reactive

reactive函数

1> 作用: 让一个对象具备响应式特性.(不能是其他数据, 数字, 字符串...)

2> 注意: 参数只能是对象

3> 使用: 

1. 从 Vue 中解构出 reactive 函数

2. 给 reactive 函数传入对象作为参数(ceactive 会将这个对象变为响应式对象)

3. 在调试工具中进行测试

具体代码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
    <div id="app">
        <!-- 使用数据 -->
        <p>我是{{ obj.name }},今年{{ obj.age }}了</p>
    </div>
    <script>
        const { createApp, reactive } = Vue//从Vue中解构出 createApp, reactive
        console.log(Vue)
        createApp({
            setup() {
                //创建响应式对象
                //reactive的参数只能是对象
                const obj = reactive({
                    name: '小白',
                    age: 90
                })
                //返回响应式数据
                return {
                    obj
                }
            }
        }).mount("#app")//一定要指定给的是哪个容器
    </script>
</body>

</html>

我们发现由reactive传过来的对象, 改变之后, 视图也会进行改变

4. 响应式函数ref

ref函数:

1. 作用: 用来定义一个响应式数据, 可以是基本类型(数字, 字符串, 布尔等), 也可以是引用类型(数组, 对象等), 这说明ref的适用面更广. 把数据变成响应式数据,这个数据可以是基本类型,也可以是引用类型.

2. 使用

1> 从 Vue 中解构出 ref 函数

2> 给 ref 函数传入指定的数据类型, ref 就可以把传入的数据变成响应式(什么数据都可以)

 3. 注意: ref 声明的响应式数据, 在标签中使用无需 .value, 但是在 js 中操作的时候, 需要 .value

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
    <div id="app">
        <!-- 在标签中 ref 返回的数据,不需要用.value来把数据表示出来, 标签中自动.value了
         不需要 {{msg.value}} -->
        <p>{{ msg }}</p>
        <p>我是{{ obj.name }},今年{{ obj.age }}岁</p>
        <button @click = "onClick">修改ref</button>
    </div>
    <script>
        //从Vue对象中解构出 createApp, ref 函数
        const { createApp, ref } = Vue
        createApp({
            setup() {
                //ref 定义响应式字符串
                const msg = ref('Hello xiaobai')
                //ref 定义响应式对象
                const obj = ref({
                    name: "xiao",
                    age: 9
                })  
                // 在 js 中需要使用.value来拿到数据
                //点击事件
                const onClick = ()=>{
                    // 修改 msg
                    msg.value = '你好,Vue3'
                    //修改 obj 的 name 和 age 属性
                    //obj.value 才是拿到的 ref 对象 
                    obj.value.name = 'vue3'
                    obj.value.age = 10
                }
                return {
                    obj,
                    msg,
                    onClick
                }
            }
        }).mount("#app")
    </script>
</body>

</html>

5. reactive 和 ref  的选择

问题: 在定义响应式数据的时候, 使用 reactive 还是 ref?

分析: 

1. reactive : 只能接收对象作为参数, 不能接收基本数据类型

2. ref: 既可以接收解基本数据类型, 也可以接收引用数据类型, 但是在用 js 进行操作的时候, 需要'.value'来进行取值

结论: 

1. 如果要把一个对象变为响应式, 并且对象的属性是确定的, 那么推荐使用reactive(在js使用的时候便捷一些不需要.value

2. 除此之外, 推荐一律使用 ref (对象的属性不确定, 定义响应式数组, 定义基本类型的响应式数据)

总结

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

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

相关文章

HarmonyOS NEXT 鸿蒙中手写和使用第三方仓库封装Logger打印工具

应用场景 在鸿蒙开发中&#xff0c;我们在很多时候调试代码都需要用到日志打印工具&#xff0c;但无论是hilog还是console.log,都用起来相对麻烦&#xff0c;而且需要手动将对象转换为JSON字符串的方式才能打印&#xff0c;并且在控制台日志中输出的格式也非常丑。所以下面我们…

批量合并 PDF 文档,支持合并成单个文档,也支持按文件夹合并 PDF 文档

在日常工作中&#xff0c;合并多个 PDF 文档为一个文件是非常常见的需求。通过合并 PDF&#xff0c;不仅能够更方便地进行管理&#xff0c;还能在特定场景下&#xff08;如批量打印&#xff09;提高效率。那么&#xff0c;当我们需要批量合并多个 PDF 文件时&#xff0c;是否有…

rbpf虚拟机-汇编和反汇编器

文章目录 一、概述二、主要功能三、关键函数解析3.1 汇编器3.1.1 parse -转换为Instruction列表3.1.2 assemble_internal-转换为Insn 3.2 反汇编器3.2.1 to_insn_vec-转换为机器指令 四、总结 Welcome to Code Blocks blog 本篇文章主要介绍了 [rbpf虚拟机-汇编和反汇编器] ❤…

虚拟现实--->unity学习

前言&#xff1a;这学期劳动课选了虚拟现实&#xff0c;其中老师算挺认真的&#xff0c;当然对一些不感兴趣的同学来说是一种折磨&#xff0c;我对这个unity的学习以及后续的虚幻引擎刚开始连基础的概念都没有&#xff0c;后面渐渐也是滋生了一些兴趣&#xff0c;用这篇博客记录…

一文详解QT环境搭建:ubuntu20.4安装配置Qt5

随着软件开发技术的不断进步&#xff0c;跨平台应用程序的需求日益增长&#xff0c;开发者们面临着如何在不同操作系统之间保持代码的一致性和效率的问题。Qt作为一个成熟的跨平台C框架&#xff0c;在这方面提供了卓越的支持&#xff0c;不仅简化了GUI应用程序的创建过程&#…

【IDEA的个性化配置】

目录&#xff1a; 一&#xff1a;隐藏项目路径二&#xff1a;禁用斜体注释三&#xff1a;重新Maven构建未完待续... 一&#xff1a;隐藏项目路径 &#x1f60a;在IDEA左侧的Project目录中&#xff0c;项目名称后面显示了项目的文件路径地址&#xff0c;如果不喜欢可以隐藏&…

【Kafka】分布式消息队列的核心奥秘

文章目录 一、Kafka 的基石概念​主题&#xff08;Topic&#xff09;​分区&#xff08;Partition&#xff09;​生产者&#xff08;Producer&#xff09;​消费者&#xff08;Consumer&#xff09;​ 二、Kafka 的架构探秘​Broker 集群​副本机制​ 三、Kafka 的卓越特性​高…

自动化发布工具CI/CD实践Jenkins部署与配置教程

1. 前言背景 其实一直想把jenkins 的笔记整理下&#xff0c;介于公司这次升级jenkins2.0 &#xff0c;根据自己部署的一些经验&#xff0c;我把它整理成笔记。 之前我们的jenkins1.0 时代 还一直停留在 free style 或者 maven 风格的项目&#xff0c;随着项目的日益增多&#x…

什么是SQL作业

SQL作业是在数据库服务器上按特定时间或间隔自动执行的计划任务或流程&#xff0c;这些作业由Microsoft SQL Server中的SQL Server代理管理&#xff0c;对于自动执行日常任务&#xff08;如数据库系统中的备份、数据导入和报告生成&#xff09;以及确保及时准确地处理和更新数据…

Android实践开发制作小猴子摘桃小游戏

Android实践制作小猴子摘桃小游戏 实践素材项目源文件获取&#xff1a;Android可能存在版本差异项目如果不能正确运行&#xff0c;可以使用里面的素材自己构建项目Android实践制作小猴子摘桃小游戏Android实践制作小猴子摘桃小游戏https://mp.weixin.qq.com/s/jNU_hVfj9xklsil…

springboot整合couchbase(集群)

springboot整合couchbase 1、Couchbase1.1、介绍1.2、Bucket1.3、Couchbase SDK 2、(key,value)写入couchbase集群2.1、总体图2.2、依赖2.3、CouchbaseConfig 配置文件2.4、代码使用 1、Couchbase 1.1、介绍 1.2、Bucket 在 Couchbase 中&#xff0c;bucket 是一个重要的概念…

VsCode启用右括号自动跳过(自动重写) - 自录制gif演示

VsCode启用右括号自动跳过(自动重写) - 自录制gif演示 前言 不知道大家在编程时候的按键习惯是怎样的。输入完左括号后编辑器一般会自动补全右括号&#xff0c;输入完左括号的内容后&#xff0c;是按→跳过右括号还是按)跳过右括号呢&#xff1f; for (int i 0; i < a.s…

[Linux]在vim中批量注释与批量取消注释

1.在vim中批量注释的步骤&#xff1a; 1.在normal模式下按Ctrl v &#xff0c;进入V-BLOCK模式 2.按 J 键 或 K 键选择要注释的内容&#xff0c;J向上K向下 我们给第5&#xff0c;6&#xff0c;7行进行注释 3.按住shift i进入插入模式&#xff0c;输入 // 4.点击ESC键&…

NC,GFS、ICON 数据气象信息可视化--降雨量的实现

随着气象数据的快速发展和应用&#xff0c;气象信息的可视化成为了一项不可或缺的技术手段。它不仅能帮助气象专家快速解读数据&#xff0c;还能为公众提供直观的天气预报信息。今天&#xff0c;我们将从降雨量的可视化出发&#xff0c;带大家一起了解如何实现气象数据的可视化…

LLM之RAG实战(五十二)| 如何使用混合搜索优化RAG 检索

在RAG项目中&#xff0c;大模型生成的参考内容&#xff08;专业术语称为块&#xff09;来自前一步的检索&#xff0c;检索的内容在很大程度上直接决定了生成的效果&#xff0c;因此检索对于RAG项目至关重要&#xff0c;最常用的检索方法是关键字搜索和语义搜索。本文将分别介绍…

[操作系统,学习记录]3.进程(2)

1.fork(); 玩法一&#xff1a;通过返回值if&#xff0c;else去执行不同的代码片段 玩法二&#xff1a;if&#xff0c;else然后调用execve函数去执行新的程序 2.进程终止&#xff1a; 退出码&#xff0c;子进程通过exit/return返回&#xff0c;父进程wait/waitpid等待而得&am…

26考研——排序_选择排序_选择排序的基本思想 简单选择排序(8)

408答疑 文章目录 四、选择排序选择排序的基本思想简单选择排序定义算法思想性能分析空间效率时间效率稳定性 适用性 九、参考资料鲍鱼科技课件26王道考研书 四、选择排序 选择排序的基本思想 每一趟&#xff08;如第 i i i 趟&#xff09;在剩下 n − i 1 n-i1 n−i1&…

PPT——组合SCI论文图片

SCI论文中对于图的排版常常是最头疼的事情&#xff0c;通常需要几个图组合在一起&#xff0c;并且如何控制图中的字体一致也是麻烦事。 保持这个大图里面的一致&#xff0c;转头一看跟其他图又不一致了。最近跟我的博导学了一手&#xff0c;今天就来记录一下吧。主要用到的软件…

Tabby 一:如何在Mac配置保姆级教程(本地模型替换hugging face下载)

1. brew安装 mac需要先安装brew&#xff0c;如果本地已经安装过brew这一步可以忽略&#xff0c;遇到问题可以自己ai问 /bin/bash -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 可能遇到source .zprofile失败&#xff0c;因为…

CentOS 安装LAMP全过程 - 完整步骤与最佳实践

在开始搭建 LAMP 环境之前&#xff0c;需要确保系统已经满足以下条件&#xff1a; 1、操作系统&#xff1a;CentOS 7 或 CentOS 8 2、网络连接&#xff1a;系统必须能够访问互联网以下载所需的软件包 3、权限&#xff1a;需要 root 权限或者通过sudo 提权执行命令 先更新系…