Vue的响应式原理与diff算法的理解

2023-11-20

前端面试中主技术栈是vue的小伙伴应该都知道,这道题会被经常问到,也是老生常谈的一些题,下面简单说一下这些题:

一、什么是vue的响应式原理?

答:

1、首次数据加载的时候,比如我data里面有age,name,通过Object.defineProperty 对数据进行劫持, 把每一个对象都添加 get 和 set 方法,要是对象里面还包含对象,就用递归也给里面的每一项添加 get 和 set 方法,(有多少层,添加多少层)

2、还有一种情况是数组,重写数组的七个方法,

(1) 通过 Array.prototype 拿到数组的原型

(2)Object.create 复制一份数组的原型并重写部分方法,(push,pop,unshift,shift,reverser,sort,splice,) 再将这个新方法赋值

二、vue中diff算法理解

答:

1、渲染时,新旧dom对比,先比较父节点的tag(标签名),key值,如果相同,则复用老节点,
该替换的替换,该保留的保留,标签和key 不同的则直接替换。


2、比较完父节点,父节点中包含子节点,比较子节点。


(1)如果新dom节点有子节点,老dom节点没有子节点, 直接用的新的节点创建。
(2)如果新dom节点中没有子节点,老dom节点中有子节点,则直接删除老dom节点中的子节点。


3、如果新dom节点和老dom节点都有子节点(采用双指针的方式) 


  (1)新老节点先进行头头比较,指针向下移动,如果key和标签不相同,指针停止。

(2)如果不满足条件1,新老节点会进行尾尾较,指针向上移动,如果key和标签不相同,指针停止。


(3)如果不满足条件1、2,则会进行交叉比较,头指针 --> 尾指针,尾指针-->头指针,如果还是不满足条件,则进行暴力比较。


 暴力比较: 用新的虚拟dom 去老的里边进行查找,找到移动位置,找不到创建dom

 


 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vue的响应式原理与diff算法的理解 的相关文章

随机推荐

  • 【经验分享】h3c模拟器HCL安装问题集锦

    转载来源 经验分享 h3c模拟器HCL安装问题集锦 https mp weixin qq com s dzDO7WvnjPJF3M6LipGbaQ 问题一 HCL安装完成后启动失败 提示 当前系统用户名中包含非ASCII字符 解决方案 HC
  • flutterApp隐藏/显示状态栏和底部栏

    import package flutter services dart SystemChrome setEnabledSystemUIOverlays 隐藏状态栏 底部按钮栏 SystemChrome setEnabledSystemUI
  • ORACLE表的在线重定义

    一 在线表重定义的用处 1 修改表或者簇的存储参数 2 在相同schema的表空间之间 可以移动表或簇 注意 如果表的可以停止dml操作 则可以利用alter table move来进行表空间的更改 3 增加 修改或者删除一个或多个表或簇的
  • leetcode-712. 两个字符串的最小ASCII删除和

    712 两个字符串的最小ASCII删除和 题目 给定两个字符串s1 和 s2 返回使两个字符串相等所需删除字符的 ASCII 值的最小和 示例1 输入 s1 sea s2 eat 输出 231 解释 在 sea 中删除 s 并将 s 的值
  • [ vulhub漏洞复现篇 ] Apache APISIX 默认密钥漏洞 CVE-2020-13945

    博主介绍 博主介绍 大家好 我是 PowerShell 很高兴认识大家 主攻领域 渗透领域 数据通信 通讯安全 web安全 面试分析 点赞 评论 收藏 养成习惯 一键三连 欢迎关注 一起学习 一起讨论 一起进步 文末有彩蛋 作者水平有限 欢
  • Linux云计算-05_Linux软件包管理

    本章介绍Linux系统软件的安装 卸载 配置 维护以及如何构建企业本地YUM光盘源及HTTP本地源 1 RPM软件包管理 Linux软件包管理大致可分为二进制包 源码包 使用的工具也各不相同 Linux常见软件包分为两种 分别是源代码包 S
  • C++ pthread cond_wait 和 cond_broadcast的使用

    一个简单的实例程序 说明pthread cond wait 和 pthread cond broadcast 的使用方式 函数定义 int pthread cond wait pthread cond t cond pthread mute
  • Coding and Paper Letter(六十一)

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 资源整理 1 Coding 1 航拍影像的土地覆盖分类 CAS机器学习人工智能2019 ZHAW 中ML DL分配的仓库 ml dl assignment 2019 2 跨
  • 职场新人如何使用ChatGPT提高工作效率

    刚刚从象牙塔中毕业 走向社会战场 作为职场新人的同学们刚刚进入公司和部门 难免会被安排做些本职工作之外的事务工作 被上级安排做些零零碎碎的小东西 俗称打杂 这些工作说难不难 想要做漂亮也并不简单 想要不辜负领导的信任 把这些工作做好 很容易
  • BP学习算法-构建三层神经网络

    引 人工神经网络 Artificial Neural Networks 简写为ANNs 也简称为神经网络 NNs 或称作连接模型 Connection Model 是一种模仿动物神经网络行为特征 进行分布式并行信息处理的算法数学模型 这种网
  • MySql学习笔记:一文上手MySql

    MySql学习笔记 quad PS 本文整理的笔记来自于B站视频 老杜带你学 mysql入门基础 mysql基础视频 数据库实战 视频讲的很好 值得大家一看 quad 一 MySql安装及概述 1 1 MySQL安装 MySql安装包下载链
  • 分层聚类算法

    分层聚类算法 转载 看到很多地方都讲到分层聚类法 这到底是什么东东 今天来研究一下 分层聚类法是聚类算法的一种 聚类算法是数据挖掘的核心技术 把数据库中的对象分类是数据挖掘的基本操作 其准则是使属于同一类的个体间距离尽可能小 而不同类个体间
  • 计算机网络4--Internet结构

    本页内容 1 基本结构 2 结构图解 3 层次结构图解 1 基本结构 a 端系统通过接入ISP access ISPs 连接到Internet b 接入ISP必须进一步互连 保证任意两个主机可以互相发送分组 c 构成复杂的网络互连的网络 2
  • Java对象数组的定义与用法

    目录 一 什么是对象数组 二 对象数组的作用 三 对象数组的语法定义 四 对象数组案例 一 什么是对象数组 1 顾名思义就是当数组元素是类对象时 这样的数组称之为对象数组 在这种情况下 数组的每一个元素都是一个对象的引用 2 对象数组 就是
  • Spring注解开发

    Spring配置繁重 注解提高开发速度 在applicationContext xml中配置组件扫描 作用是指定哪个包及其子包下的Bean需要进行扫描以便识别使用注解配置的类 字段和方法
  • PCL 法向量精细化处理

    目录 一 算法原理 1 概述 2 参考文献 二 代码实现 三 结果展示 一 算法原理 1 概述 class pcl NormalRefinement lt NormalT gt 这个类通过迭代的方式将每个点的法向量更新为其邻域内所有法向量的
  • Jenkins exec command java -jar 无法启动的问题

    看了一下午 网上讲的各种办法 都没起作用 前提 得先了解的知识 Disable exec 禁止在目标机上执行命令 勾选后将会忽略在Job配置中 Exec command 选项中设置的命令 Jenkins的说明文档中的 The Disable
  • 华为手机媒体音量自动静音_华为媒体音量自动静音

    大家好 我是时间财富网智能客服时间君 上述问题将由我为大家进行解答 检查是否有APP与媒体音量冲突 只要打开软件 手机媒体音量就自动关闭 建议卸载冲突软件 华为手机 隶属于华为消费者业务 作为华为三大核心业务之一 华为消费者业务始于2003
  • PAT 7 加法变乘法

    加法变乘法 我们都知道 1 2 3 49 1225现在要求你把其中两个不相邻的加号变成乘号 使得结果为2015比如 1 2 3 1011 12 2728 29 49 2015就是符合要求的答案 请你寻找另外一个可能的答案 并把位置靠前的那个
  • Vue的响应式原理与diff算法的理解

    前端面试中主技术栈是vue的小伙伴应该都知道 这道题会被经常问到 也是老生常谈的一些题 下面简单说一下这些题 一 什么是vue的响应式原理 答 1 首次数据加载的时候 比如我data里面有age name 通过Object definePr