react 只更新数组里某个值_React更新算法 —— Reconciliation

本文介绍了React的Reconciliation算法,即diff算法,用于高效地更新DOM。内容包括React算法的基础假定、过程,以及在处理子节点列表时如何利用key属性进行比较。文中强调了key的重要性,提供了数据自带唯一标识、数据hash和随机数作为key的策略,并指出避免使用数组下标作为key的原因。
摘要由CSDN通过智能技术生成

1846177e3ce5956b90ff66b934231161.png

Reconciliation是React的diff算法,用于比较更新前后的虚拟DOM树差异,从而使用最小的代价将原始DOM按照新的状态、属性进行更新。

Reconciliation的目的就是找出两棵树的差异,原生的方式直接怼,复杂度会是O(n^3),React使用了启发式的算法,实现了O(n)复杂度的算法。不过遗憾地是,官网这篇文章没有解释这个O(n)是怎么算出来的。

React的算法是基于以下两个假定的:

1) 不同类型的元素一定对应不同的DOM树。

2) React的使用者可以通过shouldComponentUpate函数返回false来指明某个子DOM是稳定不变的,React就可以跳过这个子DOM。

React的算法过程如下:

1) 首先比较根节点,如果根节点不同,进入2),如果根节点相同,进入3)。

2) 如果这俩根节点类型不同,一个是ul一个是div,或者一个是HelloWorld组件,一个是HiWorld组件,那啥也别说了,这个根节点往下,全部丢了重建,算法结束,更新DOM。

3) 如果根节点一样,那么两个根节点的属性。对于没有变化的属性,不处理,对于变化的属性,更新这个属性,并且通过调用子节点的componentWi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值