DOM的diffing算法

  • 基本原理

    当状态中数据发生变化时,react会根据新数据生成新的虚拟DOM,然后将新虚拟DOM和旧虚拟DOM进行diff比较,如果内容没有变化,就直接使用之前的真实DOM,如果有变化,就根据新虚拟DOM生成新的真实DOM,然后将新的真实DOM渲染到页面中替换旧真实DOM。

  • 虚拟DOM中key的作用:

    1、将新虚拟DOM和旧虚拟DOM进行diff比较时,如果在旧虚拟DOM中找到了和新虚拟DOM 相同的key,就比较两者的内容,如果内容没变,则直接使用之前的真实DOM,如果内容变了,就根据新虚拟DOM生成新的真实DOM,然后将新的真实DOM渲染到页面中替换旧真实DOM。

    2、如果没有在旧虚拟DOM中找到和新虚拟DOM相同的key,直接根据新虚拟DOM生成新的真实DOM,然后将新的真实DOM渲染到页面中替换旧真实DOM。

  • 用index作为key可能会引发的问题:

    当使用index作为虚拟DOM的key时,如果对数据做了一些逆序添加、逆序删除等破坏原有顺序的操作,在进行新旧虚拟DOM 比较时,即使有些数据没有发生变化,但因为index的改变,和新虚拟DOM进行比较的是内容完全不一样的旧虚拟DOM,这样会造成没有必要的真实DOM更新,使效率降低。当结构中还包含输入类的DOM(如input输入框)时,还会导致错误的DOM 更新,使界面有问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值