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

课程地址:【已完结】全网最详细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的这两个参数:

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu的终端中启用鼠标左键即为选中复制,右键粘贴的功能

在Ubuntu终端中启用鼠标复制和粘贴的功能需要进行一些设置。 首先,打开终端窗口,在菜单栏中找到“Edit”选项,点击“Profile Preferences”。然后,在“General”选项卡中,勾选“Use custom font”选项,可以…

博客文章:AWS re:Invent 2023 新产品深度解析 - 第四部分

TOC 🌈你好呀!我是 是Yu欸 🌌 2024每日百字篆刻时光,感谢你的陪伴与支持 ~ 🚀 欢迎一起踏上探险之旅,挖掘无限可能,共同成长! 写在最前面 去年发布文章的一部分,由于内…

微光成束,星火燎原,酷雷曼扶持政策再升级!

从北纬 18 度的三亚海角, 到北纬 53 度的漠河不夜城, 从东经 81 度的塞外江南伊犁, 到东经 120 度的上海魔都。 酷雷曼合作商为客户服务的范围 遍及全国 300 余个地区, 跨越了东南西北的辽阔地域。 即便如此, 面…

基于Bootstrap 5的创新网络服务公司网站模板

一.前言 这个网站的内容包括: 标题:Web service - Business Category Bootstrap Responsive Website Template - Home导航栏:Home, About, Services, Pages(包括Blog posts、Blog single、404、Landing page等页面)、…

fastjson转换json时默认将属性第一个字母转小写

描述: 我新建了一个实体类,但是实体类的首字母是大写的,但是使用fastjson后打印的,Json字符串首字母却是小写的,这是fastjson的一个bug 实体类: Json字符串: 解决方法: 一、使…

一个 .net 8 + Azure 登录 + Ant Design Blazor 的基本后台框架

一个 .net 8 Azure 登录 Ant Design Blazor 的基本后台框架 主界面使用了 Ant Design Blazor 项目模板搭建 后台技术是 .net 8 Blazor run at server 模式 登录方式使用 Azure 实现了菜单导航和路由 此外实现了读取和修改本地Json文件的功能,不是必须的&#x…

Github 2024-04-16Python开源项目日报 Top10

根据Github Trendings的统计,今日(2024-04-16统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目10TypeScript项目1Vue项目1系统设计指南 创建周期:2507 天开发语言:Python协议类型:OtherStar数量:241693 个Fork数量:42010 次…

MySql8快速迁移版的制作过程

首先说明,mysql 8的安装不同与mysql5.x。 做程序的朋友都知道,程序好做,客户难伺候,因为限于用户的情况,如何能让用户把程序运行起来很关键,比如日前我在做 山东高中信息技术 学考 考前练习 系统时&#x…

3d模型附加之后怎么分离?---模大狮模型网

在3D建模过程中,有时候我们需要将多个物体合并成一个模型,以便于进行操作或者导出。然而,在某些情况下,我们也需要将这些附加的物体进行分离,以便对它们进行单独的编辑或者处理。本文将介绍在3D建模软件中如何将附加的…

密文字段模糊检索方案

代码地址: https://github.com/zuiyu-main/EncryptDemo https://mp.weixin.qq.com/s/cXOg1tiMtJz2eibDZmXHUQ 在个别特殊领域中,数据的安全问题是非常的重要的,所以需要数据库存储的数据是需要加密存储的。所以也就引申出来本文这个问题,加密…

顺丰同城急送API对接(附源码)

一、背景 最近公司让我对接顺丰同城急送的API,讲讲里面需要注意的几点 官方的API文档有些示例代码也不全,具体细节不多说,如果你现在也需要对接他们API,可以参考本篇博客再配合官方文档结合起来看,可以让您再开发的时…

深度学习--CNN应用--VGG16网络和ResNet18网络

前言 我们在学习这两个网络时,应先了解CNN网络的相关知识 深度学习--CNN卷积神经网络(附图)-CSDN博客 这篇博客能够帮我们更好的理解VGG16和RetNet18 1.VGG16 1.1 VGG简介 VGG论文网址:VGG论文 大家有兴趣的可以去研读一下…

C++设计模式|创建型 4.建造者模式

1.什么是建造者模式? 建造者模式(也被成为生成器模式),是一种创建型设计模式,软件开发过程中有的时候需要创建很复杂的对象,而建造者模式的主要思想是将对象的构建过程分为多个步骤,并为每个步骤定义一个…

共享WiFi贴推广有哪些好处?一文说清

随着科技发展,更加智能高效便捷的共享wifi贴开始越来越多的取代了传统的wifi连接方法。 因为传统的连接WiFi方式确实存在一些不便之处。客人需要手动搜索店铺的WiFi,然后输入复杂的密码进行连接。这一过程不仅繁琐,而且容易出错。有时&#…

稳了!麒麟信安云应用助力国产化生态平稳过渡

2016年国家提出了安全可控体系并大力推进基础硬件、基础软件及应用软件的国产化建设进程。各行业及企事业单位加大国产设备及软硬件的采购力度,逐步完成国产化转型。而操作系统作为上层应用的载体,在信息建设国产化中有着举足轻重的地位。 过去几十年&a…

虚函数求圆形、矩形面积

目录 题目 源码 结果示例 题目 写一个程序,定义抽象基类Shape,由它派生出2个派生类:Circle(圆形)、Rectangle(矩形),用一个普通函数printarea分别输出以上二者的面积,2个图形的数据在定义对象时给定。 源码 #inc…

软考-系统集成项目管理中级--项目质量管理(输入输出很重要!!!本章占分较高,着重复习)

本章历年考题分值统计 本章重点常考知识点汇总清单 5、成本效益分析法:对每个质量活动进行成本效益分析,就是要比较其可能的成本与预期的效益。达到质量要求的主要效益包括减少返工、提高生产率、降低成本、提升干系人满意度及提升赢利能力。(掌握)17下64考题 本章…

【Flutter】GetX状态管理及路由管理用法

目录 一、安装二、使用1.安装GetX插件,快捷生成模版代码2.主入口MaterialApp改成GetMaterialApp3.定义路由常量RoutePath类、别名映射页面RoutePages类4. 初始initialRoute,getPages。5.调用 总结 一、安装 dependencies: get: ^4.6.6二、使用 1.安装G…

Java八股文4

Linux篇 1.free命令-查看内存状态 free命令用于显示内存状态,它可以提供关于系统内存使用情况的详细信息。这个命令会显示出内存的使用情况,包括实体内存、虚拟的交换文件内存、共享内存区段,以及系统核心使用的缓冲区等。 其中,参…

2024年国内USB Type-C厂商的机遇与挑战分析

USB Type-C接口作为一种全新的连接标准,已经在各种电子设备中得到了广泛的应用。2024年,国内USB Type-C厂商将面临着诸多机遇和挑战,需要全面分析和应对,以确保在竞争激烈的市场中保持竞争力和持续增长。 USB TYPE-C厂商在2024年…