vue2-vue实例挂载的过程
1、思考
new Vue()这个过程中究竟做了什么?过程中是如何完成数据的绑定,又是如何将数据渲染到视图的等等。
2、分析
首先找到vue的构造函数。
源码位置:/src/core/instance/index.js
options是用户传递过来的配置项,如data、methods等常用的方法。
vue构建函数调用__init方法,但在文本中并未发现此方法,但仔细可以看到文件下方定义了很多初始方法。

首先可以看到initMixin方法,发现该方法在vue原型上定义了__init方法。
源码位置:/src/core/instance/init.js



仔细阅读以上代码,我们可以得出以下结论:
在调用beforeCreate之前,数据初始化并未完成,像data、props这些属性无法访问到
到了created的时候,数据已经初始化完成,能够访问data、props这些属性,但这时候并未完成DOM的挂载,因此无法访问到dom元素。
挂载方法是调用vm.$mount方法。
initState方法是完成props/data/method/watch/method的初始化。
源码位置:/scr/core/instance/state.js

这里我们主要看初始化data的方法为initData,它与initState在同一文件下。



仔细阅读上面代码,我们可以得到以下结论:
初始化顺序:props、methods、data
data定义的时候可以选择函数形式或者对象形式(组件只能是函数形式)
数据的响应式。
上文提到的挂载方法是调用vm.$mount方法。




阅读上方代码,可以得到一下结论:
不要将根元素放到body或者 html上
可以在对象中定义template/render或者直接使用template、el表示元素选择器
最终都会解析成render函数,调用compileToFunctions,会将template解析成render函数
对template的解析步骤大致分为以下几步:
将html文档片段解析成ast描述符
将ast描述符解析成字符串
生成render函数
生成render函数,挂载到vm上后,会再次调用mount方法。
源码位置:/src/paltforms/web/runtime/index.js

调用mountComponent渲染组件




阅读上述代码,可以得到下面结论:
会触发beforeCreate钩子
定义updateComponent渲染页面视图方法
监听组件数据,一旦发生变化,触发beforeUpdate生命钩子
updateComponent方法主要执行在vue初始化时声明的render,update方法
render的主要作用是生成vnode
源码位置:/src/core/instance/render.js



_update主要功能是调用patch,将vnode转化为真实DOM,并且更新到页面中。
源码位置:/src/core/instance/lifecycle.js

3、结论
new Vue的时候会调用_init方法
定义 s e t 、 set、 set、get、 d e l e t e 、 delete、 delete、watch等方法
定义 o n 、 on、 on、off、 e m i t 等事件定 义 u p d a t e 、 emit等事件 定义_update、 emit等事件定义update、forceUpdate、$deatory生命周期
调用$mount进行页面挂载
挂载的时候主要是通过mountComponent方法
定义updateComponent更新函数
执行render生成虚拟dom
_update将虚拟DOM生成真实DOM结构,并渲染到页面中。
相关文章:
vue2-vue实例挂载的过程
1、思考 new Vue()这个过程中究竟做了什么?过程中是如何完成数据的绑定,又是如何将数据渲染到视图的等等。 2、分析 首先找到vue的构造函数。 源码位置:/src/core/instance/index.js options是用户传递过来的配置项,如data、meth…...
C++ 右值引用案例
C 右值引用案例 右值引用(Rvalue reference)是 C11 引入的新特性,它的主要意义是实现移动语义(Move semantics)和完美转发(Perfect forwarding)。这两者都可以提高代码的性能和灵活性。 一、移…...
2.文件的逻辑结构
第四章 文件管理 2.文件的逻辑结构 顺序文件采用顺序存储则意味着各个逻辑上相邻的记录在物理上也是相邻的存储的。所以如果第0号记录的逻辑地址为0的话,则i号记录的逻辑为i *L。 特别的如果这个定长记录的顺序文件采用串结构,也就是这些记录的顺序和他…...
20天学rust(一)和rust say hi
关注我,学习Rust不迷路 工欲善其事,必先利其器。第一节我们先来配置rust需要的环境和安装趁手的工具,然后写一个简单的小程序。 安装 Rust环境 Rust 官方有提供一个叫做 rustup 的工具,专门用于 rust 版本的管理,网…...
牢记这16个SpringBoot 扩展接口,写出更加漂亮的代码
1、背景 Spring的核心思想就是容器,当容器refresh的时候,外部看上去风平浪静,其实内部则是一片惊涛骇浪,汪洋一片。Springboot更是封装了Spring,遵循约定大于配置,加上自动装配的机制。很多时候我们只要引…...
c++两种设计模式 单例和工厂模式
c两种设计模式 单例和工厂模式 一.单例 1.单例的概念 1.当前的类最多只能创建一个实例 2.当前这个唯一的实例,必须由当前类创建(自主创建),而不是调用者创建 3.必须向整个系统提供全局的访问点,来获取唯一的实例 …...
2023-08-05——JVM 栈
栈 stack 栈:数据结构 程序数据结构算法 栈:先进后出,后进先出 好比一个:桶 队列:先进先出(FIFO :First Input First Out) 好比一个:管道 栈:喝多了吐。队列…...
Camera之PhysicalCameraSettingsList/SurfaceMap/CameraMetadata/RequestList的关系(三十二)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注:Android…...
【ONE·Linux || 基础IO(二)】
总言 文件系统与动静态库相关介绍。 文章目录 总言2、文件系统2.1、背景知识2.2、磁盘管理2.2.1、磁盘文件系统图2.2.2、inode与文件名 2.3、软硬链接 3、动静态库3.1、站在编写库的人的角度:如何写一个库?3.1.1、静态库制作3.1.3、动态库制作 3.2、站在…...
【LeetCode 算法】Power of Heroes 英雄的力量
文章目录 Power of Heroes 英雄的力量问题描述:分析代码Math Tag Power of Heroes 英雄的力量 问题描述: 给你一个下标从 0 开始的整数数组 nums ,它表示英雄的能力值。如果我们选出一部分英雄,这组英雄的 力量 定义为ÿ…...
合宙Air724UG LuatOS-Air script lib API--ntp
ntp Table of Contents ntp ntp.timeSync(period, fnc, fun) ntp 模块功能:网络授时. 重要提醒!!!!!! 本功能模块采用多个免费公共的NTP服务器来同步时间 并不能保证任何时间任何地点都能百分…...
LangChain+ChatGLM大模型应用落地实践(一)
LLMs的落地框架(LangChain),给LLMs套上一层盔甲,快速构建自己的新一代人工智能产品。 一、简介二、LangChain源码三、租用云服务器实例四、部署实例 一、简介 LangChain是一个近期非常活跃的开源代码库,目前也还在快速…...
PSO粒子群优化算法
PSO粒子群优化算法 算法思想matlab代码python代码 算法思想 粒子群算法(Particle Swarm Optimization) 优点: 1)原理比较简单,实现容易,参数少。 缺点: 1)易早熟收敛至局部最优、迭代后期收敛速度慢的…...
记一次 .NET某医疗器械清洗系统 卡死分析
一:背景 1. 讲故事 前段时间协助训练营里的一位朋友分析了一个程序卡死的问题,回过头来看这个案例比较经典,这篇稍微整理一下供后来者少踩坑吧。 二:WinDbg 分析 1. 为什么会卡死 因为是窗体程序,理所当然就是看主…...
C# 基于Rijndael对文件进行加解密
介绍: Rijndael 是一种对称加密算法,也是 AES(Advanced Encryption Standard)的前身。它用于数据的加密和解密,并提供了安全且高效的加密功能。 在.NET Framework 中,Rijndael 类是一个实现了 Rijndael 算法…...
Elasticsearchr入门
首先在官网下载elasticsearch8.9版本,以及8.9版本的kibana。 解压,点击es8.9bin目录下的elasticsearch.bat文件启动es 如图所示即为成功。 启动之后打开idea,添加依赖 <dependency><groupId>com.fasterxml.jackson.core</g…...
【ARM】imx6ul移植kernel记录,恩智浦github提供的最新kernel(2023年7月31)
❤️作者主页:凉开水白菜 ❤️作者简介:共同学习,互相监督,热于分享,多加讨论,一起进步! ❤️专栏目录: ❤️专栏资料: ❤️点赞 👍 收藏 ⭐再看,养成习惯 订阅的粉丝可通过PC端文末加我微信,可对文章的内容进行一对一答疑! 文章目录 一、简介二、源码下载三、官方…...
eeglab(自用)
目录 1.加载、显示数据 2.绘制脑电头皮图 3.绘制通道光谱图 4.预处理工具 5.ICA去除伪迹 5. 提取数据epoch 1.加载、显示数据 观察事件值(Event values):该数据集中包含2400个事件,每个事件指定了EEG.event结构的字段Type(类型)、position(位置)和…...
Dockerfile构建Tomcat镜像(源码)
Dockerfile构建Tomcat镜像 目录 Dockerfile构建Tomcat镜像 1、建立工作目录 2、编写Dockerfile文件 3、构建镜像 4、测试容器 5、浏览器访问测试: 1、建立工作目录 [roothuyang1 ~]# mkdir tomcat[roothuyang1 ~]# cd tomcat/[roothuyang1 tomcat]# lsapach…...
Frida Error: getPackageInfoNoCheck(): has more than one overload的解决方法
使用frida绕过证书的时候执行代码: frida -U -f de.robv.android.xposed.installer --codeshare akabe1/frida-multiple-unpinning --no-pause遇到这样的错误 Error: getPackageInfoNoCheck(): has more than one overload, use .overload() to choose from: 网上查…...
QPdf:Qt生态下的PDF渲染技术深度解析与现代应用实践
QPdf:Qt生态下的PDF渲染技术深度解析与现代应用实践 【免费下载链接】qpdf PDF viewer widget for Qt 项目地址: https://gitcode.com/gh_mirrors/qpd/qpdf 在Qt应用开发中,PDF文档处理一直是个技术痛点。传统方案要么依赖平台原生组件导致跨平台…...
快速体验Seed-Coder-8B-Base:通过简单API调用实现代码自动生成
快速体验Seed-Coder-8B-Base:通过简单API调用实现代码自动生成 1. 为什么选择Seed-Coder-8B-Base 在当今快节奏的开发环境中,代码自动生成工具已经成为提升效率的必备利器。Seed-Coder-8B-Base作为一款专为代码生成优化的开源模型,具有以下…...
大模型剪枝新范式:先浓缩,再剪枝——DenoiseRotator技术解读
在技术领域,我们常常被那些闪耀的、可见的成果所吸引。今天,这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力,让我们得以一窥未来的轮廓。然而,作为在企业一线构建、部署和维护复杂系统的实践者,我们深知…...
Xiaomi Home集成:小米智能家居设备接入Home Assistant的完整解决方案
Xiaomi Home集成:小米智能家居设备接入Home Assistant的完整解决方案 【免费下载链接】ha_xiaomi_home Xiaomi Home Integration for Home Assistant 项目地址: https://gitcode.com/GitHub_Trending/ha/ha_xiaomi_home 小米智能家居集成项目(Xia…...
用快马AI将数据库理论变现实:三分钟搭建学生信息管理原型
用快马AI将数据库理论变现实:三分钟搭建学生信息管理原型 数据库系统概论这门课我学了很久,但总觉得理论和实践之间隔着一道鸿沟。直到最近尝试用InsCode(快马)平台快速搭建了一个学生信息管理系统原型,才发现原来抽象的概念可以这么直观地呈…...
FPGA新手避坑指南:UART、SPI、I2C三大串行协议到底怎么选?
FPGA新手避坑指南:UART、SPI、I2C三大串行协议到底怎么选? 第一次接触FPGA开发时,面对琳琅满目的通信协议选择,很多新手都会感到无从下手。UART、SPI、I2C这三种最常见的串行协议各有特点,但选错协议可能导致项目延期、…...
S2-Pro卷积神经网络(CNN)可视化教学:原理详解与模型部署
S2-Pro卷积神经网络(CNN)可视化教学:原理详解与模型部署 1. 当AI遇见深度学习教学 想象一下,当你第一次接触卷积神经网络时,是不是被那些抽象的概念和复杂的数学公式搞得晕头转向?传统的学习方式往往需要…...
医疗数据增强技巧:提升MedGemma在小数据集上的表现
医疗数据增强技巧:提升MedGemma在小数据集上的表现 1. 引言 当你手头只有几百张医疗影像数据,却要训练一个强大的MedGemma模型时,会不会觉得这是个不可能完成的任务?别担心,这恰恰是很多医疗AI开发者面临的真实困境。…...
CSS3毛玻璃效果实战:backdrop-filter与filter的兼容性解决方案
1. 毛玻璃效果的前世今生 第一次看到毛玻璃效果是在苹果的iOS系统上,那种半透明磨砂的质感瞬间让我眼前一亮。作为前端开发者,我立刻开始研究如何用代码实现这种被称为"玻璃拟态"(Glassmorphism)的设计风格。其实这种效果在CSS3之前就有开发者…...
Elasticsearch面试八股整理
1. Elasticsearch 和 Lucene 是什么关系?这是高频第一问。你可以答:“Lucene 是底层全文检索库,负责倒排索引、分词、评分这些核心能力。Elasticsearch 是在Lucene 之上做的分布式封装,提供了集群、分片、副本、REST API、聚合分析…...
