当前位置: 首页 > news >正文

vue3运行时执行过程步骤

在 Vue 3 中,运行时的执行过程是一个复杂但高效的机制,主要包括初始化应用、渲染、响应式更新和销毁等阶段。以下是 Vue 3 运行时的执行过程的核心步骤和流程:


1. 应用初始化

1.1 创建 Vue 应用

调用 createApp 方法,创建一个 Vue 应用实例。

const app = createApp(App);
  • Vue 应用实例用于管理整个应用。
  • App 是根组件(通常是一个对象或 SFC 文件)。
1.2 挂载应用

通过调用 app.mount('#app') 挂载根组件。

  • Vue 将根据传入的选择器(如 #app),找到 DOM 容器作为根组件的挂载点。
  • Vue 运行时会将根组件渲染为虚拟 DOM,并将其挂载到真实 DOM 上。

2. 虚拟 DOM 创建与初次渲染

2.1 渲染函数生成虚拟 DOM

Vue 使用组件定义的 render 函数或编译好的模板函数,生成虚拟 DOM(VNode)。

  • 如果使用模板,模板会被预先编译为渲染函数。
  • 渲染函数返回一棵描述 UI 结构的虚拟 DOM 树。
2.2 虚拟 DOM 转换为真实 DOM

Vue 使用虚拟 DOM 树,通过Diff 算法将其转换为真实 DOM,并插入到页面中。

  • 调用 patch 方法,递归地创建 DOM 元素并绑定事件等。

3. 组件系统

3.1 创建子组件

当虚拟 DOM 中遇到子组件:

  • Vue 会递归创建子组件实例。
  • 子组件的 props 会从父组件传递下去。
  • 子组件的生命周期钩子函数会被依次触发(setupmounted 等)。
3.2 setup 执行

Vue 3 使用 setup 作为组合式 API 的入口:

  • 初始化响应式数据和计算属性。
  • 绑定方法和事件。
  • 返回的数据和方法将暴露给模板使用。

4. 响应式系统

4.1 数据初始化

Vue 3 的响应式系统基于 Proxy,在 setup 中通过 reactiveref 创建响应式对象:

const state = reactive({ count: 0 });
  • Vue 会拦截对 state.count 的读取和修改操作。
4.2 依赖收集
  • 当组件渲染时,Vue 会跟踪使用响应式数据的所有依赖(如模板中的绑定或计算属性)。
  • 依赖收集基于 Effect(副作用函数),Vue 通过 watchEffect 等机制跟踪变化。
4.3 数据更新
  • 当响应式数据发生变化时,Vue 会通过 scheduler 触发更新。
  • Vue 会重新运行依赖该数据的渲染函数或副作用函数。
  • Vue 只会更新受影响的部分 DOM(基于虚拟 DOM Diff 算法)。

5. 更新过程

5.1 虚拟 DOM Diff
  • Vue 会对比新旧虚拟 DOM 树,找出需要更新的节点。
  • 通过 Diff 算法,Vue 可以高效地确定变化点。
5.2 真实 DOM 更新
  • Vue 根据 Diff 结果对真实 DOM 进行最小化更新(增、删、改 DOM 节点)。
  • 确保性能优化,避免不必要的重绘和重排。

6. 销毁与卸载

当组件被销毁或卸载时,Vue 会执行以下步骤:

  1. 生命周期钩子:触发 beforeUnmountunmounted 钩子。
  2. 依赖清理:移除所有绑定的事件监听器和依赖关系。
  3. DOM 清理:从 DOM 树中移除组件相关的节点。

Vue 3 运行时的执行过程总结

以下是完整流程的概览:

  1. 初始化应用:创建并挂载根组件。
  2. 首次渲染:通过模板或渲染函数生成虚拟 DOM,并渲染到真实 DOM。
  3. 响应式系统:通过 Proxy 跟踪数据变化,依赖收集和更新。
  4. 数据更新:响应式数据变化触发虚拟 DOM Diff 和真实 DOM 的高效更新。
  5. 销毁与清理:卸载组件时清理相关资源。

Vue 3 的运行时架构利用虚拟 DOM 和响应式系统实现了高效的渲染与更新,同时通过组合式 API 提供了灵活的开发体验。

相关文章:

vue3运行时执行过程步骤

在 Vue 3 中,运行时的执行过程是一个复杂但高效的机制,主要包括初始化应用、渲染、响应式更新和销毁等阶段。以下是 Vue 3 运行时的执行过程的核心步骤和流程: 1. 应用初始化 1.1 创建 Vue 应用 调用 createApp 方法,创建一个 V…...

常用的AT命令,用于查看不同类型的网络信息

文章目录 1. ATCSQ‌:2. ATCREG‌:‌3. ATCOPS‌:4. ATCGATT‌:5. ATCGPADDR‌: 在AT命令集中,用于查看网络信息的命令有多种,具体取决于所使用的设备和模块。以下是一些常用的AT命令&#xff0…...

Vue3组件通讯——自定义事件(子->父)

需求如下: 1.在子组件中,当用户点击提交按钮后,更新数据库 2.数据更新成功后,子组件通知父组件getUserInfo函数,重新获取数据,同步更新 3.子组件等待getUserInfo函数执行完毕后,调用init函数…...

GLSL 着色器语言

GLSL 着色器语言 1. 着色器语言基础1.1 数据类型1.2 数据类型的基本使用1.3 运算符1.4 各个数据类型的构造函数1.5 类型转换1.6 存储限定符1.7 插值限定符1.8 一致块1.9 layout 限定符1.10 流程控制1.11 函数的声明和使用1.12 片元着色器中浮点及整型变量精度的指定1.13 程序的…...

如何创建一个 Vue.js 工程

创建一个 Vue.js 工程 可以分为以下几个步骤: 安装 Node.js 和 npm:Vue.js 依赖于 Node.js 和 npm,因此首先需要在计算机上安装 Node.js 和 npm。可以从 Node.js 的官方网站(https://nodejs.org/)下载并安装。 安装 V…...

Mysql 性能优化:覆盖索引

概述 覆盖索引(Covering Index)是一个 MySQL 查询优化技术,它指的是一个索引包含了查询所需的所有字段的数据,因此不需要回表(访问数据表的行)就可以完成查询。使用覆盖索引可以显著提高查询性能&#xff…...

vulnhub靶场【DC系列】之7

前言 靶机:DC-7,IP地址为192.168.10.13 攻击:kali,IP地址为192.168.10.2 都采用VMWare,网卡为桥接模式 对于文章中涉及到的靶场以及工具,我放置在网盘中,链接:https://pan.quark…...

iOS - 消息机制

1. 基本数据结构 // 方法结构 struct method_t {SEL name; // 方法名const char *types; // 类型编码IMP imp; // 方法实现 };// 类结构 struct objc_class {Class isa;Class superclass;cache_t cache; // 方法缓存class_data_bits_t bits; // 类的方法…...

Wireshark 学习笔记1

1.wireshark是什么 wireshark是一个可以进行数据包的捕获和分析的软件 2.基本使用过程 (1)选择合适的网卡 (2)开始捕获数据包 (3)过滤掉无用的数据包 (4)将捕获到的数据包保存为文件…...

Oracle OCP考试常见问题之线上考试流程

首先要注意的是:虽然Oracle官方在国际上取消了获得OCP认证需要培训记录的要求,但在中国区,考生仍然需要参加Oracle的官方或者其合作伙伴组织的培训,并且由Oracle授权培训中心向Oracle提交学员培训记录。考生只有在完成培训并通过考…...

微信小程序之历史上的今天

微信小程序之历史上的今天 需求描述 今天我们再来做一个小程序,主要是搜索历史上的今天发生了哪些大事,结果如下 当天的历史事件或者根据事件选择的历史事件的列表: 点击某个详细的历史事件以后看到详细信息: API申请和小程序…...

记一次k8s下容器启动失败,容器无日志问题排查

问题 背景 本地开发时&#xff0c;某应用增加logback-spring.xml配置文件&#xff0c;加入必要的依赖&#xff1a; <dependency><groupId>net.logstash.logback</groupId><artifactId>logstash-logback-encoder</artifactId><version>8…...

【HarmonyOS】纯血鸿蒙真实项目开发---经验总结贴

项目场景&#xff1a; 将已有的Web网页接入到原生App。 涉及到一些网页回退、webviewController执行时机报错1710000001、位置定位数据获取、拉起呼叫页面、系统分享能力使用等。 问题描述 我们在选项卡组件中&#xff0c;在每个TabContent内容页中使用web组件加载网页。 在…...

kettle做增量同步,出现报错:Unrecognized VM option ‘MaxPermSize-256m‘

本文内容来自YashanDB官网&#xff0c;原文内容请见&#xff1a;https://yashandb.com/newsinfo/7863039.html?templateId1718516 问题现象 kettle在增量同步过程&#xff0c;出现报错&#xff1a;Unrecognized VM option ‘MaxPermSize256m’ 问题的风险及影响 无法使用ke…...

网络安全、Web安全、渗透测试之笔经面经总结(三)

本篇文章涉及的知识点有如下几方面&#xff1a; 1.什么是WebShell? 2.什么是网络钓鱼&#xff1f; 3.你获取网络安全知识途径有哪些&#xff1f; 4.什么是CC攻击&#xff1f; 5.Web服务器被入侵后&#xff0c;怎样进行排查&#xff1f; 6.dll文件是什么意思&#xff0c;有什么…...

计算机的错误计算(二百零五)

摘要 基于一位读者的问题&#xff0c;提出题目&#xff1a;能用数值计算证明 吗&#xff1f;请选用不同的点&#xff08;即差别大的数&#xff09;与不同的精度。实验表明&#xff0c;大模型理解了题意。但是&#xff0c;其推理能力值得商榷。 例1. 就摘要中问题&#xff0…...

Vue3(一)

1.Vue3概述 Vue3的API由Vue2的选项式API改为了组合式API。但是&#xff0c;也是Vue2中的选项式API也是兼容的。 2.创建Vue3项目 create-vue 是 Vue 官方新的脚手架工具&#xff0c;底层切换到了 vite。使用create-vue创建项目的步骤如下&#xff1a; 安装 create-vue npm i…...

【项目】修改远程仓库地址、报错jdk

一、修改远程仓库地址 进入你刚刚克隆到本地的仓库目录&#xff0c;执行以下命令来修改远程仓库的 URL&#xff0c;将其指向你自己的新仓库&#xff1a; cd 原仓库名 git remote set-url origin <你自己的新仓库的 Git 地址>补充&#xff1a; 错误分析&#xff1a; wa…...

实训云上搭建集群

文章目录 1. 登录实训云1.1 实训云网址1.2 登录实训云 2. 创建网络2.1 网络概述2.2 创建步骤 3. 创建路由器3.1 路由器名称3.1 创建路由器3.3 查看网络拓扑 4. 连接子网5. 创建虚拟网卡5.1 创建原因5.2 查看端口5.3 创建虚拟网卡 6. 管理安全组规则6.1 为什么要管理安全组规则6…...

豆包ai 生成动态tree 增、删、改以及上移下移 html+jquery

[豆包ai 生成动态tree 增、删、改以及上移下移 htmljquery) 人工Ai 编程 推荐一Kimi https://kimi.moonshot.cn/ 推荐二 豆包https://www.doubao.com/ 实现效果图 html 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF…...

达摩院春联AI实战落地:中小企业春节营销内容智能生产方案

达摩院春联AI实战落地&#xff1a;中小企业春节营销内容智能生产方案 1. 引言&#xff1a;当春节营销遇上AI 春节&#xff0c;是中国人最重要的节日&#xff0c;也是商家营销的黄金时段。对于中小企业来说&#xff0c;如何在这个节点高效、低成本地创作出有年味、有创意的营销…...

13.2软件架构风格

一、软件架构风格 &#xfeff;00:10 1. 软件体系结构风格概述 &#xfeff;01:101&#xff09;软件体系结构风格定义 &#xfeff;01:16 领域特定模式&#xff1a;描述特定应用领域中系统组织方式的惯用模式&#xff0c;如穿衣风格&#xff08;日系/韩系/中式&#xff09;或建…...

Golang怎么实现SSE服务端推送事件_Golang如何用Server-Sent Events实时推送数据【教程】

Go 的 http.ResponseWriter 能多次写入&#xff0c;但需禁用缓冲、手动刷新并防止中间件断连&#xff1b;SSE 需设正确 header、定时心跳、严格格式输出、绕过干扰中间件&#xff0c;并配置反向代理。Go 的 http.ResponseWriter 为什么不能直接写多次&#xff1f;因为 SSE 要求…...

React Easy State 在 React Native 中的应用:跨平台状态管理解决方案

React Easy State 在 React Native 中的应用&#xff1a;跨平台状态管理解决方案 【免费下载链接】react-easy-state Simple React state management. Made with ❤️ and ES6 Proxies. 项目地址: https://gitcode.com/gh_mirrors/re/react-easy-state React Easy State…...

SUNFLOWER MATCH LAB硬件对接:基于STM32F103C8T6最小系统板的图像采集端设计

SUNFLOWER MATCH LAB硬件对接&#xff1a;基于STM32F103C8T6最小系统板的图像采集端设计 最近在做一个植物生长监测的项目&#xff0c;需要部署一批低成本的图像采集终端。核心需求很简单&#xff1a;定时给植物拍照&#xff0c;然后把照片传到云端服务器。听起来不难&#xf…...

ACE-Step应用场景解析:如何为视频快速生成背景音乐?

ACE-Step应用场景解析&#xff1a;如何为视频快速生成背景音乐&#xff1f; 1. 引言&#xff1a;视频创作者的背景音乐痛点 在视频创作过程中&#xff0c;背景音乐的选择往往成为最耗时的环节之一。专业音乐授权费用高昂&#xff0c;免费音乐库又难以找到完全匹配的内容&…...

eVTOL 研制必读 | 厘清研制保证与设计保证的边界

在很多航空企业里&#xff0c;经常会出现一种现象&#xff1a;项目团队在谈“研制保证体系”&#xff0c;管理层在谈“设计保证系统”&#xff1b;技术人员在强调 ARP4754A/B&#xff0c;组织层面却在说 DOA 合规。大家都在讲“保证”&#xff0c;却未必在讲同一件事。结果是什…...

黑马程序员python核心语法-基础知识

python快捷键使用CtrlAlts 打开软件设置CtrlD 复制当前行代码CtrlAlt上\下 将当前代码上移或下移Ctrlshiftf10 运行当前代码文件Ctrlf6&#xff1a;重命名文件Ctrlf 搜索# 字面量的写法 print(100) # 整数(int) print(3.14) # 浮点数/小数(float) print(True) # 布尔&#xf…...

OpenClaw任务监控:Qwen3-14b_int4_awq模型执行日志分析

OpenClaw任务监控&#xff1a;Qwen3-14b_int4_awq模型执行日志分析 1. 为什么需要关注OpenClaw任务日志 上周我在用OpenClaw自动处理一批技术文档时&#xff0c;遇到了一个奇怪的现象&#xff1a;任务明明显示"已完成"&#xff0c;但输出的文件内容却是空的。这个问…...

Linux相关概念和易错知识点(52)(基于System V的信号量和消息队列)

目录1、System V信号量&#xff08;1&#xff09;信号量的本质与核心原理&#xff08;2&#xff09;PV原语&#xff08;均为原子操作&#xff09;a. P原语&#xff08;申请资源&#xff09;b. V原语&#xff08;归还资源&#xff09;&#xff08;3&#xff09;System V信号量接…...