Vue.js 3 应用开发与核心源码解析 阅读笔记

https://www.dedao.cn/ebook/reader?id=V5R16yPmaYOMqGRAv82jkX4KDe175w7xRQ0rbx6pNgznl9VZPLJQyEBodb89mqoO

2022年出的书,针对Vue的版本是3.2.28,当前的版本是 3.4.21。

本书的一大特色是对Vue 3.x的核心源码(响应式原理、双向绑定实现、虚拟DOM、<keep-alive>原理和实现)进行了分析和讲解,这不仅有利于读者掌握Vue.js的设计思想,也能提升读者对Vue.js框架的熟练度,同时Vue.js源码知识也是近年来前端面试经常被问到的内容,学习和掌握这些内容是非常必要的。选择这本书的原因是有核心源码解析部分,这个会对深入了解会有帮助吧。

第一章 Vue概述

1.1 MVC 和MVVM模式

MVVM让开发真更加专注于页面视图,从视图出发来编写业务逻辑。 

1.2 Vue.js 简介

1.2.1 Vue的由来

解决Angular过于庞大功能复杂上手难度高的问题。

1.2.2 Vue 前端工程化和Webpack

Webpack的主要功能是将前端工程所需要的静态资源文件打包成一个或者若干个js和CSS文件。

1.3 Vue 的 安装和导入

1.3.1 CND 方式导入

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

1.3.2 npm导入

npm install vue

1.3.3 Vue Cli 和 Vite导入

 1.4 Vue3 的新功能

更快,更小,更易于维护

组合式API,新增内置组件,服务端渲染,vite

1.5 ES 6 语言基础

1.5.1 变量声明 

1 let, var 和 const

使用let/ const来声明变量

2 箭头函数

let f = v =>v 等同于 var f = function (v) {return v}

let f  = () => 5 等同于 var f = function() (return 5}

let f = (num1, num2) => num1 +num2  等同于 var f=function(num1, num2) {return num1+num2}

=> 后面跟随函数的返回值

3,对象属性和方法的简写 ES6 允许在大括号中直接写入变量和函数,作为对象的属性和方法。

4,对象解构

可以使用解构从数组和对象中提取值并赋给变量

1.5.2 模块化

1,ES6模块化概述

类似于python的import相似功能。JavaScript程序员自己制定了一些模块加载方案,主要有CommonJS和AMD两种。前者用于Node.js服务器,后者用于浏览器。

2, import和export

ES 6的到来,终于原生支持了模块化功能,即import和export。

1.5.3 Promis和async/await

1 Promise Promise是一种适用于异步操作的机制,比传统的回调函数解决方案更合理和更强大。

2, async/await 

async/await是两个关键字,主要用于解决异步问题,其中async关键字代表后面的函数中有异步操作,await关键字表示等待一个异步方法执行完成。这两个关键字需要结合使用。

1.6 实践

实现如图的效果:显示内容随着输入内容变化(双向绑定)

html文档的理解:

1,2 是需要再index.html目录下需要有的文件。

3,4,5 通过变量msg进行信息同步

6,7,8 通过变量名  id= "app" 来进行信息同步。

1.7 小结与练习

第二章 Vue基础

2.1 Vue 实例和组件

2.1.1 创建Vue实例

这个例子中,createApp方法创建一个Vue使用实例。该实例通过调用mount方法,和页面上的DOM渲染进行挂载。mount的参数(#apt)传递id选择器,挂载之后这个Id对应的DOM就被Vue实例接管。

mount方法, Vue中的mount方法是将Vue实例与实际网页DOM相结合的关键步骤。它负责将Vue应用从纯Javascript对象转化为用户可见的网页界面,并建立起数据与界面之间的相应关系。

id选择器和class选择器:是CSS中两种基本且重要的选择器,用于HTML文档中定位并相应样式到特定的DOM元素。 id选择器以井号(#)开头,唯一性,高特异性,语义化,Javascript交互,class选择器用点号(.)开头, 可复用性 。

Vue中id选择器和class选择器的使用与传统HTML和CSS并没有本质区别,用于CSS样式应用和可能得JavaScript交互。由于Vue的特性,call选择器在Vue项目中扮演着重要的角色。而id选择器在Vue中使用相对较少,主要集中于DOM定位,路由锚点或极少数需要极高样式优先级的场景。

createApp方法传递的参数是根组件(也可以叫作根实例)的配置,返回的对象叫作Vue应用实例,当应用实例调用mount方法后返回的对象叫作根组件实例,一个Vue应用由若干个实例组成,准确地说是由一个根实例和若干个子实例(也叫子组件)组成。如果把一个Vue应用看作一棵大树,那么称根节点为Vue根实例,子节点为Vue子组件。

2.1.2 用component() 方法创建组件

23-26行使用上一步返回的Vue实例app调用component()方法新建一个组件。该方法的以一个参数标记这个组件的名字,第二个参数是一个对象,这里的data必须是一个函数function,这个函数返回一个对象。template定义了一个模板,表示这个组件将会使用这部分HTML代码作为其内容。

15-16行,<button-component>表示用了一个自定义标签来使用组件,其内容保持和组件名一样,这是Vue中特有的使用组件的写法。可以多次使用,以达到组件复用的效果。

2.1.3 Vue组件、根组件、实例的区别

在一般情况下,我们使用createApp创建的叫作应用(根)实例,然后调用mount方法得到的叫作根组件,而使用app.component()方法创建的叫作子组件,组件也可以叫作组件实例,概念上它们的区别并不大。

Vue中的组件是相互嵌套的,可以看作是一个树结构,就是组件树。

2.1.4 全局组件和局部组件

2.1.3代码中直接使用app.component()创建的组件为全局组件,全局组件无须特意指定挂载到哪个实例上,可以在需要时直接在组件中使用,,全局组件必须在根应用实例挂载前定义,即需要再app.mount("#apt")之前定义。全局组件可以在任意的Vue组件中使用。局部组件表示指定它被某个组件所引用。

下面的例子为创建局部组件,代码

结果:

 

 为了组件复用,可以将组件单独抽离出来,代码,结果如下:

2.1.5 组件方法和事件的交互操作

例子2.1.7 定义和调用方法的展示。单击“Hello inner”后显示弹窗。

  

在模板中通过设置@click="clickCallback"表示为<h2>绑定了一个click事件,回调方法是clickCallback,当单击发生时,会自动从methods中寻找clickCallback这个方法,并且触发它。

可以设置另一个方法,同时在clickCallback中使用this.xxx()去调用,如示例代码2-1-8所示。单击Hello inner,两个弹出窗口。

      

例 2.1.9 使用方法进行DOM交互操作

单击“click0”,可以实现数值++的操作。

   

2.1.6 单文件组件

,组件的模板代码被抽离到一起,使用<template>标签包裹;组件的脚本代码被抽离到一起,使用<script>标签包裹;组件的样式代码被抽离到一起,使用<style>标签包裹。这使得组件UI样式和交互操作的代码可以写在一个文件内,方便了维护和管理。

正因为Vue.js有了单文件组件,才能将其和构建工具(Webpack等)结合起来,使得Vue.js项目不单单是简单的静态资源查看,而是可以集成更多文件预处理功能,这些功能改变了传统的前端开发模式,更能体现出前端工程化的特性,目前大部分Vue.js项目都会采用单文件组件。

2.2 Vue模版语法

模板语法是一种用于生成动态内容的语法规则。它通常用于在网页开发中,将数据和静态模板结合起来,生成最终的网页内容。《数据和展示方式联系到一起》

2.2.1 插值表达式

用{{}}来完成插值。

1.文本插值

{{}},可以使用v-oncel指令,使得数据改变时,插值处的内容不会改变。

例1-6中的练习,增加v-once后,mssg的值将停止变化。

Vue指令:在Vue中给DOM元素添加v-***形式的属性的写法叫作指令

2,原始HTML插值

插入的值会按照文本来解释,如果插入的是含有HTML代码的字符串,需要使用v-html指令。

这个命令存在危险,对于用户输入的内容不能使用这个指令,很容易导致XSS攻击。

3,属性插值

插值语法不能作用在HTML的属性上,遇到这种情况应该使用v-bind指令。

4, JavaScript表达式插值

2.2.2 指令

Vue指令:在Vue中给DOM元素添加v-***形式的属性的写法叫作指令

1, v-bind

v-bind是Vue.js框架中的一个指令,用于将数据绑定到HTML元素的属性上。通过v-bind指令,我们可以动态地将Vue实例中的数据绑定到HTML元素的属性上,实现数据的响应式更新。

v-bind的语法格式为:v-bind:属性名=“表达式”,其中属性名是要绑定的HTML属性,表达式是Vue实例中的数据或计算属性。

例如,我们可以使用v-bind将Vue实例中的一个变量绑定到HTML元素的class属性上:

<div v-bind:class="className"></div>

在上述代码中,className是Vue实例中的一个变量,通过v-bind:class指令将其绑定到div元素的class属性上。当className的值发生变化时,div元素的class属性也会相应地更新。

v-bind的简写用法是使用冒号(:)代替v-bind指令。通过简写,我们可以更加简洁地绑定数据到HTML元素的属性上。使用简写后的写法是:

<div :class="className"></div>

这样就可以将组件的className属性绑定到div元素的class属性上了。 

2, v-if, v-else, v-else-if
3, v-show
4, v-for
5, v-on
6, v-model
7, v-memo
8,指令的动态参数

2.3 Vue的data属性、方法、计算属性和监听器

2.3.1 data属性

2.3.2 方法

2.3.3 计算属性

2.3.4 计算属性和方法

2.3.5 监听器

2.3.6 监听器和计算属性

2.4 案例 Vue 3 留言板

2.4.1 功能描述

2.4.2 案例完整代码

2.5 小结与练习

第三章 Vue组件

3.1 组件生命周期

3.1.1 beforeCreate 和 created

3.1.2 beforeMount 和 mounted

3.1.3 beforeUpdate 和 updated

3.1.4 beforUnmount 和 unmounted

3.1.5 errorCaptured

3.1.6 activated和 deactivated

3.1.7 renderTracked 和 renderTriggered

3.2 组件通信

3.2.1 组件通信概述

3.2.2 父组件向子组件通信

3.2.3 子组件向父组件通信

3.2.4 父子组件的双向数据绑定与自定义v-model

3.2.5 非父子关系组件的通信

3.2.6 provided / inject

3.3 组件插槽

3.3.1 默认插槽

3.3.2 具名插槽

3.3.3 动态插槽名

3.3.4 插槽后备

3.3.5 作用域插槽

3.3.6 结构插槽props

3.4 动态组件

3.5 异步组件和<suspense>

3.6 <teleport>

3.7 Mixin

3.7.1 Mixin合并

3.7.2 全局Mixin

3.7.3 Mixin取舍

3.8 案例: Vue3 待办事项

3.8.1 功能描述

3.8.2 案例完整代码

3.9 小结和练习

第四章Vue组合式API

4.1 组合式API基础

4.2 setup 方法

4.2.1 setup方法的参数

4.2.3 setup方法组合模版使用

4.2.4 setup方法的执行时机和getCurrentlnstance方法

4.3 响应式类方法

4.3.1 ref和reactive

4.3.2 toRef和toRefs

4.3.3 其他响应式类方法

4.4 监听类方法

4.4.1 computed 方法

4.4.2 watchEffect方法

4.4.3 watch方法

4.5 生命周期类方法

4.6 mehods方法

4.7 provide/ inject

4.8 单文件组件<script setup>

4.9 案例: 组合式API待办事项

4.9.1 功能描述

4.9.2 案例完整代码

4.10 小结与练习

第五章VUE动画

5.1 从一个简单的动画开始

5.2 transition组件实现过渡效果

5.3 transition组件实现动画效果

5.4 transition组件实现过渡和动画

5.5 transition组件的钩子函数

5.6 多个元素或组件的过渡 / 动画效果

5.7 列表数据的过渡效果

5.8 案例: 魔幻的事项列表

5.8.1 功能描述

5.8.2 案例完整代码

5.9 小结与练习

第六章 VUE状态管理

6.1 什么是“状态管理模式”

6.2 Vuex概述

6.3 state

6.4 getters

6.5 mutation

6.6 action

6.7 modules

6.8 Vuex插件

6.9 在组合式API中使用Vuex

6.10Vues使用的场合

6.11 PINia介绍

6.12 案例: 事项列表的数据通信

6.13 小结与练习

第七章 Vue路由管理

7.1 什么是单页应用

7.2 Vue Router概述

7.3 动态路由

7.3.1 动态路由匹配

7.3.2 相应路由变化

7.4 导航守卫

7.4.1 全局前置守卫

7.4.2 全局解析守卫

7.4.3 全局后置钩子

7.4.4 组件内的守卫

7.4.5 路由配置守卫

7.5 嵌套路由

7.6 命名视图

7.7 命名路由

7.8 编程式导航

7.9 路由组件传参

7.10 路由重定向、别名即元信息

7.10.1 路由重定向

7.10.2 路由别名

7.10.3 路由元数据

7.11 Vue Router的路由模式

7.12 滚动行为

7.13 Keep-alive

7.13.1 keep-alive缓存状态

7.13.2 利用元数据Meta控制keep-alive

7.14 路由懒加载

7.15 在组合式API中使用Vue Router

7.16 案例:Vue Router路由代办事项

7.17 小结与练习

第八章 Vue Cli 工具

8.1 Vue Cli 概述

8.2 Vue Cli 的安装和使用

8.3 Vue Cli 自定义配置

8.4 案例 Vue Cli创建待办事项

8.5 小结与练习

第九章 Vite 工具

9.1 Vite概述

9.2 Vite的安装和使用

9.3 Vite自定义配置

9.4 Vite与Vue Cli

9.5 案例 Vite创建待办事项

9.6 小结与练习

第十章 Vue 服务端渲染

10.1 服务端渲染概述

10.2 Vue服务端渲染改造

10.3 编写通用的代码

10.4 预渲染

10.5 Nuxt.js 介绍

10.6 案例 服务端渲染待办事项

10.7小结与练习

第十一章 Vue 核心源码解析

11.1 源码目录结构解析

11.1.1 下载并情动Vue 3 源码

11.1.2 目录模块

11.1.3 构建版本

11.2 面试高频响应式原理

11.2.1 Proxy API

11.2.2 Proxy和响应式对象reactive

11.2.3 ref()方法运行原理

11.3 大名鼎鼎的虚拟DOM

11.3.1 什么是虚拟DOM

11.3.2 Vue 3 虚拟DOM 

11.3.3 获取<template>的内容

11.3.4 生成AST

11.3.5 生成render方法字符串

11.3.6 得到最终的Vnode对象

11.4 双向绑定的前世今生

11.4.1 响应式触发

11.4.2 生成新的VNode

11.4.3 虚拟DOM的diff过程

11.4.4 完成真实DOM的修改

11.5<keep-alive>的魔法

11.5.1 LRU算法

11.5.2 缓存VNode对象

11.6 小结与练习

第十二章 实战项目 豆瓣电影评分系统

12.1 开发环境准备 

12.2 项目功能逻辑

12.3 首页开发

12.4 登录页开发

12.5 详情页开发

12.6 发表页开发

12.7 搜索页开发

12.8 路由配置

12.9 服务端渲染改造

12.10 小结

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

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

相关文章

【八股】Java基础、集合、JVM

面向对象三大特性 1 封装&#xff1a; 将 方法 和 属性 写到同一个类中&#xff0c;并将属性 私有化&#xff0c;生成 get set方法&#xff0c;外部访问属性需要通过get和set方法,内部可以直接访问属性&#xff0c;这样的一个类我们认为它完成了封装。 2 继承&#xff1a; 子…

【Linux系统编程】第九弹---权限管理操作(下)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、目录权限 2、粘滞位 总结 1、目录权限 首先提出一个问题&#xff0c;删除一个文件需要什么权限呢&#xff1f;&#xff1f…

视频美颜SDK原理与实践:从算法到应用

当下&#xff0c;从社交媒体到视频通话&#xff0c;人们越来越依赖于视频美颜功能来提升自己的形象。而视频美颜SDK作为支撑这一技术的重要工具&#xff0c;其原理和实践至关重要。 一、什么是视频美颜SDK&#xff1f; 视频美颜SDK是一种软件开发工具包&#xff0c;用于集成到…

python文件 成绩分析

‘’文件score.txt中存储了学生的考试信息,内容如下 小明,98 小刚,90 小红,91 小王,98 小刘,80 请写代码,读取文件数据,并进行如下分析 最高分和最低分分别是多少&#xff1f;得最高分的学生有几个&#xff1f; 得最低分的学生有几个平均分是多少&#xff1f; ‘’’ def rea…

【linux】基础IO(软硬链接)

上一节我们已经搞懂了已经被打开的文件&#xff0c;还有没有被打开的文件都是怎样被管理起来的&#xff0c;同样&#xff0c;路径的重要性也不言而喻&#xff0c;是确定文件在那个分区&#xff0c;进而可以解析到目标文件与目录内容的关系&#xff0c;从而找到inode&#xff0c…

【可下载】CDA 一级 2024最新模拟题一(全网最详细有答案)

CDA一级考试的考查内容相当基础&#xff0c;考试内容涵盖了多个关键领域&#xff0c;包括数据分析的基本概念、数据结构的理解、数据库的基础知识、描述性统计分析的方法、多维数据透视分析的技巧、业务数据分析的实践应用&#xff0c;以及业务分析报告与数据可视化报表的制作。…

C++: IO流

目录 1、C语言输入输出 流的概念&#xff1a; 2、CIO流 3、C文件IO流 1、C语言输入输出 C语言中我们用到的最频繁的输入输出方式就是scanf () 与 printf() 。 scanf(): 从标准输入设备 ( 键 盘 ) 读取数据&#xff0c;并将值存放在变量中 。 printf(): 将指定的文…

基于STM32的蓝牙小车(虚拟串口模拟)的Proteus仿真

文章目录 一、前言二、仿真图1.要求2.思路3.画图3.1 电源部分3.2 超声波测距部分3.3 电机驱动部分3.4 按键部分3.5 蓝牙部分3.6 显示屏部分3.7 整体 4.仿真5.软件 三、总结 一、前言 proteus本身并不支持蓝牙仿真&#xff0c;这里我采用虚拟串口的方式来模拟蓝牙控制。 这里给…

如何在PostgreSQL中使用pg_stat_statements插件进行SQL性能统计和分析?

文章目录 一、启用pg_stat_statements插件二、查看统计信息三、定期重置统计信息四、注意事项 PostgreSQL中的pg_stat_statements是一个强大的插件&#xff0c;用于追踪执行时间最长的SQL语句。通过它&#xff0c;我们可以获取有关SQL语句执行频率、总执行时间、平均执行时间等…

Centos7.9 脚本一键部署nextcloud,配置Nginx代理Https。

目录 一键安装nextcloud 出现错误TypeError Cannot read properties of undefined (reading ‘writeText‘) 生成自签名SSL证书 编辑Nginx配置文件 启动Nginx 一键安装nextcloud 本脚本参考文章&#xff0c;本文较长建议先看完在操作&#xff01;&#xff01;&#xff01;…

【性能测试】ChaosTesting(混沌测试)ChaosBlade(混沌实验工具)(四)-k8s容器混沌实验

5. 创建 kubernetes 相关的实验场景 5.0 blade create k8s 5.0.1 介绍 创建 kubernetes 相关的实验场景&#xff0c;除了使用 blade 命令创建场景外&#xff0c;还可以将实验使用 yaml 文件描述&#xff0c;使用 kubectl 命令执行。目前支持的实验场景如下&#xff1a; [bl…

6、ES单机设置用户名密码、集群设置用户名密码、es-head登录、如何去掉密码

目录 一、ES单节点密码配置1、修改配置文件2、 重启es服务3&#xff0c;执行修改密码命令4、访问服务 二、ES集群密码配置1、确定主节点2、生成elastic-stack-ca.p123、生成elastic-certificates.p124、修改配置文件并重启集群5、进行密码配置6、验证 三、es-head登录增加密码的…

数据可视化(七):Pandas香港酒店数据高级分析,涉及相关系数,协方差,数据离散化,透视表等精美可视化展示

Tips&#xff1a;"分享是快乐的源泉&#x1f4a7;&#xff0c;在我的博客里&#xff0c;不仅有知识的海洋&#x1f30a;&#xff0c;还有满满的正能量加持&#x1f4aa;&#xff0c;快来和我一起分享这份快乐吧&#x1f60a;&#xff01; 喜欢我的博客的话&#xff0c;记得…

HarmonyOS开发案例:【图片编辑】

介绍 本篇Codelab是基于ArkTS的声明式开发范式的样例&#xff0c;主要介绍了图片编辑实现过程。样例主要包含以下功能&#xff1a; 图片的解码。使用PixelMap进行图片编辑&#xff0c;如裁剪、旋转、亮度、透明度、饱和度等。图片的编码。 相关概念 [图片解码]&#xff1a;读…

【书生浦语第二期实战营学习笔记作业(四)】

课程文档&#xff1a;https://github.com/InternLM/Tutorial/blob/camp2/xtuner/readme.md 作业文档&#xff1a;https://github.com/InternLM/Tutorial/blob/camp2/xtuner/homework.md 书生浦语第二期实战营学习笔记&作业(四) 1.1、微调理论讲解及 XTuner 介绍 两种Fin…

不要摆摊,不要开早餐店,原因如下

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 我最近开通了视频号会员专区嘛&#xff0c;专区有个问答功能可以提问&#xff0c;有个会员问了我问题&#xff0c;其中一条问答分享给大家&#xff1a; 松哥&#xff0c;突然想去兼职&#xff0c;早上卖点杂粮煎饼果…

C语言自定义类型【结构体】

结构体的概念 结构是一些值的集合&#xff0c;这些值被称为成员变量。结构的每个成员可以是不同类型的变量。 1.结构体的声明 1.1普通声明 我们假设要创建一本书的类型&#xff0c;那我们需要书名&#xff0c;作者&#xff0c;价格&#xff0c;书的ID 代码如下&#xff1a;…

2024年04月09日 Go生态洞察:2024年上半年Go开发者调查报告洞察

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a;…

Linux——web基础实验

实验前的安装 [rootwebserver ~]# yum -y install httpd [rootwebserver ~]# systemctl enable --now httpd Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service. [rootwebserver ~]# echo test for apach…

性能监控数据(本地、服务器)

CPU、内存、磁盘等的监控 一、mac本地性能监控 1. top 终端&#xff1a; top load Avg: 平均负载(1分钟&#xff0c;5 分钟&#xff0c;15 分钟)值不能超过 4&#xff0c;要不然就是超负荷运行 Tasks: 进程数 %Cpu(s): idle :剩余百分比 KiB Mem: free:剩余内存&#xff0…