合并多次setState

setState被设计为一个异步的方法,目的是为了提升React底层的性能。假设我们短时间内连续变更3次state,React就会把这3次setState合并为一次setState,只做一次VDOM的比对,提高了整体的性能。

同级比较

diff算法会从根节点开始,一层层的向下比较,如果在某一层的某个节点发现不同了,他就会直接替换这个节点下面的所有子树。

key值的重要性

如果每一个虚拟DOM节点没有一个key值,他就没有自己的一个名字。当我们在做新旧虚拟dom的比对时,旧状态的虚拟节点就与难以与新状态的虚拟节点之间确立关系。当每一个虚拟节点都有唯一key值时,新旧状态的虚拟节点很快就能知道谁是谁,这样就极大的提升了diff算法的效率。

为什么不要将数组的下标作为key值

假如数组中又3个节点a,b,c。我们使用数组下标来作为dom的key值。

[a, b, c] // 0:a, 1:b, 2:c

这时删除b

[a, c] // 0:a, 1:c

原来key值为1对应节点为b, 但现在key=1对应的节点变成了c。这时这个key值就失去了它存在的意义了。 所以,为key值绑定一个稳定的值才是正确的做法

diff算法中的概念相关推荐

  1. 在虚拟DOM和Diff算法中为什么不建议使用index作为key值?

    key是什么 key是虚拟DOM的一个重要标识,在DIff算法中,key对我们的性能也有着至关重要到的作用,有key就可以优化Diff算法,提高渲染性能: key在页面更新的时候做了什么 1.首先,当 ...

  2. Diff算法中使用index作为key的弊端

    首先都知道diff算法是依赖生成虚拟DOM然后跟真实DOM进行比较差异化来实现按需更新. 我们现在又数组1:[{name:"柯南",title:"侦探"},{n ...

  3. CRF算法中辅助概念 团 极大团 最大团

    https://blog.csdn.net/aspirinvagrant/article/details/40735609

  4. 十分详细的diff算法原理解析

    本文我们总结一下有关diff算法的相关内容和实现原理 开门见山,直接先给出大家diff算法的概念 diff算法可以看作是一种对比算法,对比的对象是新旧虚拟Dom.顾名思义,diff算法可以找到新旧虚拟 ...

  5. git diff的生成方式:myers diff算法

    概述 本文参考:https://blog.jcoglan.com/2017/02/12/the-myers-diff-algorithm-part-1/ 每个开发者多少都接触过git的diff功能,如 ...

  6. 【vue设计与实现】快速Diff算法 1

    快速Diff算法,顾名思义,该算法的实测速度非常快.该算法最早应用于ivi和inferno这两个框架,Vue.js3借鉴并进行了扩展. 不同于简单Diff算法和双端Diff算法,快速Diff算法包含预 ...

  7. vue3 - diff算法之快速diff算法

    快速Diff算法 预处理 前面讲到简单Diff算法和双端Diff算法,它们使用不一样的对比规则对虚拟节点的 type(元素名)和 虚拟节点的key(唯一标识)来区分是否有可以复用的旧节点.快速Diff ...

  8. diff 算法深入一下?

    一.前言 有同学问:能否详细说一下 diff 算法. 简单说:diff 算法是一种优化手段,将前后两个模块进行差异化比较,修补(更新)差异的过程叫做 patch,也叫打补丁. 文章主要解决的问题: 1 ...

  9. Vue之diff算法

    前言 Vue通过双向绑定来实现数据驱动视图更新,当数据更新会触发Dep对象notify通知所有的订阅者Watcher对象,Watcher对象最后会调用run来执行Watcher对象的getter方法. ...

最新文章

  1. 语音助手再次敲响隐私保护警钟
  2. 5专题总结-数据结构
  3. c语言链表输出header中的乱码,大家帮忙看看这段代码,最后一个链表输出后总带一些乱码?请教...
  4. Cookie工具类-cookieUtil.js
  5. python定义常量
  6. H5与客户端交互的方式有哪些? 怎么做?
  7. 北大中文核心期刊目录(部分)
  8. 微服务 注册中心的作用_微服务-服务与注册中心
  9. 第10章 数据库运行维护与优化
  10. kettle- linux定时执行ktr shell脚本
  11. quot;title_activity_distquot; is not translated in quot;zh-rCNquot; (Chinese: China)
  12. [Pytorch系列-61]:循环神经网络 - 中文新闻文本分类详解-3-CNN网络训练与评估代码详解
  13. Android 学习之垂直切换的圆角 Banner 和垂直指示器
  14. bochs linux 安装软件,bochs linux镜像
  15. Plugin: Memory Dump by aeon update 12.10
  16. mysql 赋权限_MySQL赋予用户权限命令总结
  17. trheejs中常用灯光总结
  18. 安信可TG-12F模组学习笔记 ① 在AliOS-Thing架构上快速开发实现一个天猫精灵插座。
  19. Kafka 发送消息
  20. 制作一个简单HTML学校网页(HTML+CSS山东传媒职业学院)

热门文章

  1. 格子游戏 ACWING-1250
  2. 该页面仅以HTML格式保存_轻松实现页面自动刷新功能,提高前端开发效率
  3. 通过 js 设置点击查看原图
  4. Python求一组数据的均值,方差,标准差
  5. Macbook Pro 副屏 - Gobigger 4k 便携屏使用体验
  6. python实现Excel文件读取的程序(附源代码)
  7. echarts 柱状图【立体】
  8. win10/11 联机账号取消登录密码
  9. 基于Go语言Beego+Vue+ElementUI实现的毕业设计神器
  10. 世界杯用python画足球