【学习笔记】Vue3源码解析:第五部分 - 实现渲染(2)

news2025/1/16 16:18:36

课程地址:【已完结】全网最详细Vue3源码解析!(一行行带你手写Vue3源码)

第五部分-:(对应课程的第33 - 35节)

第33节:《讲解组件渲染流程》

在这里插入图片描述

1、在 render 函数中拿到虚拟dom vnode后,编写patch函数,它接收3个参数:null、vnode、container,分别代表:上一次的虚拟dom即旧的虚拟dom,这一次的虚拟dom即新的虚拟dom,以及要挂载的元素:

在这里插入图片描述

2、编写patch方法:

在这里插入图片描述

3、添加 processComponent 与 mountComponent 方法:

在这里插入图片描述

4、这里我们写的 render 函数,相当于一个effect,因为当内部的数据变化时,需要进行界面的更新:

在这里插入图片描述

第34节:《创建组件实例》

1、在 vnode 中增加一个component 属性:
在这里插入图片描述

2、在 mountComponent 中加入创建组件的实例对象、解析数据到这个实例对象中以及创建effect的方法,这3个方法都是在 component.ts文件中定义的:

在这里插入图片描述

3、新建 component.ts 文件,在其中定义这3个方法:

在这里插入图片描述

4、编写创建组件实例对象 createComponentInstance 中的代码:

在这里插入图片描述

第35节:《解析数据到组件实例上》

1、编写 setupComponent 方法中的逻辑:

在这里插入图片描述

查看源码中打印的 setup 的两个入参:

在这里插入图片描述

其中 context 打印如下,这个context对象有 attrs、emit、slots 和 expose 四个属性:

在这里插入图片描述

2、回到自己的工程,在组件中写一个setup:

在这里插入图片描述

给组件的实例对象添加一个type属性:

在这里插入图片描述

定义 setupStateComponent 方法,在其中拿到组件上的setup方法并执行:

在这里插入图片描述

测试setup执行,控制台可以成功打印:

在这里插入图片描述

3、继续添加如下代码:给setup传递第一个参数:组件实例的props:即

createApp(App,{name:'sy',salary:25}).mount('#app') 

这行代码中传递给 createApp 的第二个参数:{name:‘sy’,salary:25} 。
通过 createContext 函数生成 setup 的第二个参数 context 对象。

在这里插入图片描述

打印观察setup的这两个参数:

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

WordPress 主题选择与自定义配置

最近我在使用wordpress网站进行建站。 我是使用的hostease的主机产品进行wordpress建站,在选择wordpress主题时颇为头疼。后来咨询了hostease的客服人员,他们家的技术人员提供了诸多帮助。在WordPress网站建设时,主题选择对于建立各类网站至关…

档案数字化能为企业带来什么帮助

档案数字化为企业带来以下帮助: 1. 空间节省:数字化档案可以减少实体档案的存储空间需求,不再需要大量的文件柜和文件存储空间,从而帮助企业节约办公场地。 2. 检索便捷:数字化档案可以通过关键词搜索、标签分类等方式…

fcrackzip工具的使用教程

下载fcrackzip软件包 查看版本 创建一个1.txt文本文件,然后把1.txt解压成1.zip,密码为007lyt fcackzip有两种使用方法 1、暴力破解 用法示例 fcrackzip -b -c 1a -l 1-10 -u 1.zip -b使用暴力破解 -c 指定掩码类型 a表示a-z,A表示A-Z&am…

与上级意见不合时如何恰当地表达自己的观点?

在工作中与上级意见不合时,恰当表达自己的观点并寻求共识是一个需要谨慎处理的问题。以下是一些建议: 1. **尊重与礼貌**:在任何情况下,都应保持对上级的尊重和礼貌。即使在意见不合时,也要避免情绪化,保持…

nodejs工具脚本json转excel

json转excel 主要使用 sheetjs 库 vim convertJsonToExcel.js 封装转换方法 import fs from fs; import XLSX from xlsx;/*** 扁平化嵌套json对象* param {Object} jsonObj* param {String} prefix* returns*/ export function flattenKeys(jsonObj, prefix ) {const resul…

运筹学基础(七):拉格朗日松弛(Lagrangian relaxation)

文章目录 基本概念原问题松弛问题、拉格朗日乘子、对偶函数对偶问题三个问题之间的关系 为什么要用拉格朗日松弛法算法流程核心问题松弛哪个约束松弛后分解的子问题的求解拉格朗日乘子怎么定 参考资料 基本概念 原问题 考虑如下的整数规划问题: m i n c T x s . …

简谈 BlueNRG-LP 和-LPS 的代码空间优化

1.引言 客户在使用 BlueNRG-LP/LPS 芯片时,增加 OTA 服务后常常反馈说,编译代码区域超空间了,需要帮忙优化一下。后文主要通过下列步骤进行分析和优化 BlueNRG-LP/LPS 的代码空间: a. 通过分析 BlueNRG-LP/LPS 的 OTA 方式&…

【Canvas与数学】动态生成圆形中运动的包络线

【题设】 F为圆内任一一点,A为圆周上一点,AF连线的中垂线交圆周与CD两点,求CD围成的图形形状。 【关键点】 使用解析几何方法求出FA中垂线与圆的交点,应用中学数学知识就可做到。 注意中间变量及时求出来比较好,在…

【C++程序员的自我修炼】友元

心之所向 素履以往 目录 友元函数 cout 如何输出自定义类型 cin 如何输入自定义类型 总结 友元类 日期类Date 如何访问 时间类Time 内部类 概念: 总结: 契子✨ 我们之前已经把类与对象的基础知识已经学完了,这些是只针对一个类的操作 那么…

endnote21从安装到使用!文献引用!Mac版

视频学习和资源获取 新建库 选择上方导航栏处的File下的New 软件 软件界面可以分成四个部分 2是个人图书馆 3是对某一分类中文献的展示 最右侧是对具体一篇文献的摘要、编辑以及PDF 有回形针标志意味着这篇有全文,也就是有pdf 如果没有回形针代表它只有引文信…

【电力工程】电力大数据和云架构智能AI服务平台研发建设项目可行性研究报告范例

1、项目概况 本项目拟进行基于电力大数据和云架构的智能 AI 服务平台的研究,具体包括电力多元大数据中心、技术中台、数据中台和智能 AI 中台,基于电力大数据云平台基础构建 BI 可视化开发平台和智能 AI 服务平台。 该项目的实施旨在引领公司在大数据领域发展的新趋势,从功…

【第三版 系统集成项目管理工程师】 十五至尊图

持续更新。。。。。。。。。。。。。。。 【第三版】十五至尊图 十五至尊图【必会】1.整合(7)2.范围 (6)3.进度 (6)4.成本 (4)5.质量(3)6.资源(6&…

el-table使用show-summary合计,但只需要合并某一列

el-table使用show-summary合计,但只需要合并某一列 这里有两种方法,一种是网上的,我会引用他的链接给你们看。 一种是我自己看源码发现的 方法一 这个就是方法一的链接 点击我跳转方法一 方法二 不需要计算的列 去掉prop 然后用插槽显示即可…

利用动态规划在有向图上实现高效语音识别算法

在现代语音识别系统中,动态规划是一种非常关键的技术。它能够帮助我们将复杂的语音信号转换为可理解的文字信息。在本文中,我们将探讨如何使用动态规划方法在有向图上实现语音识别。我们将首先介绍问题的背景和基本概念,然后提供一个高效的算…

【路径规划】局部路径规划算法——DWA算法(动态窗口法)|(含python实现 | c++实现)

文章目录 参考资料1. DWA算法原理1.1 简介1.2 算法原理1. 速度采样2. 轨迹预测(轨迹推算)3. 轨迹评价 2. Python实现2.1 参数配置2.2 机器人运动学模型2.3 DWA算法类实现2.4 画图2.5 主函数 3. c实现4. 总结 参考资料 The Dynamic Window Approach to C…

如何在Windows 10中启用和使用上帝模式,这里有详细步骤

序言 上帝模式(God Mode)是一个特殊的文件夹,只在一个窗口中显示所有可用的操作设置。它可以节省搜索命令的时间,而无需知道通过“开始”菜单或“控制面板”查找命令的步骤。上帝模式默认情况下是隐藏的,所以我们需要…

ROS 2边学边练(29)-- 使用替换机制

前言 启动文件用于启动节点、服务和执行流程。这组操作可能有影响其行为的参数。替换机制可以在参数中使用,以便在描述可重复使用的启动文件时提供更大的灵活性。替换是仅在执行启动描述期间评估的变量,可用于获取特定信息,如启动配置、环境变…

链表带环问题——leetcode环形链表1 2

证明链表带环 链表的带环问题指的是本该指向NULL的最后一个节点指向了之前的节点,导致链表成环,找不到尾结点的情况,那么我们该如何证明链表带环呢? 我们可以类比物理中的追及问题,让快慢指针同时走,两者相…

在wsl下安装QT

文章目录 一、前言二、安装QT1、安装依赖 2、安装qt1、先下载到window中,复制到wsl上2、执行命令 三、命令行打开QT1、打开~/.bashrc,在里面添加命令2、测试 四、mysql驱动 一、前言 本方案可以在wsl下正常安装QT,但是QT菜单栏的字体大小调整不了&#…

【开源】使用Python+Flask+Mysql快速开发一个用户增删改查系统

项目演示 项目本身很简单,增删改查是几乎所有系统的骨架。正所谓万丈高楼平地起,学会了增删改查,航母就指日可待了:),光速入门,直接看演示图: 项目地址 https://github.com/mudf…