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

如下例,点击按钮字符串交替出现消失。,v-show的元素会始终被渲染并保存在DOM中,它只是被隐藏,显示和隐藏只是简单地切换CSS的display属性。

一般来说,v-if切换开销更高,而v-show的初始渲染开销更高。因此,如果需要非常频繁地切换,使用v-show更好;如果在运行时条件很少改变,则使用v-if更好。
 

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 小结

相关推荐

  1. Vue3梳理:目录结构及阅读方法

    2024-04-26 15:18:03       42 阅读
  2. muduo阅读笔记(11、TcpClient)

    2024-04-26 15:18:03       34 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-26 15:18:03       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-26 15:18:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-26 15:18:03       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-26 15:18:03       20 阅读

热门阅读

  1. 子组件使用this.$emit向父组件传递信息

    2024-04-26 15:18:03       18 阅读
  2. Gradle的安装配置及使用

    2024-04-26 15:18:03       13 阅读
  3. 安装OceanBase的机器如果出现故障,应该如何处理

    2024-04-26 15:18:03       16 阅读
  4. kotlin根据文件的filePath转化为uri

    2024-04-26 15:18:03       37 阅读
  5. WordPress外贸独立站如何提高询盘转化率

    2024-04-26 15:18:03       18 阅读
  6. Reactjs数据篇

    2024-04-26 15:18:03       12 阅读
  7. ubuntu创建新用户,添加用户权限,删除用户

    2024-04-26 15:18:03       15 阅读