对于updateChildren里最后一个情况判断不理解
来源:4-13 深入diff算法源码-updateChildren函数

Darkholme
2021-05-13
问题一:老师,这个updateChildren里一开始会通过开始结束的顺序往里递进一个一个通过sameVnode方法对比新旧node的key和sel是否一致。如果有例外了话(我这里就是理解成sameVnode返回了false,也就是Key和sel其中之一或者两者都对应不上)。那么就会走进拿新的key去和所有的旧key进行对比,然后如果对应上了就再去比较sel,sel没对应就直接插入新的。可是如果对应上了sel,就是这里,为什么会有这种情况?如果对应上了sel那么不就是key和sel都相等吗,那这种情况的新node应该已经在前面通过sameVnode返回true了然后执行递归patchVnode了,为啥这里还要判断这种情况?
之前的指针前后推进对比会有落下的,没对比过的组合吗?如果有,那我就能理解了,如果没有我就不理解了。。。
问题二:为啥要用patchVnode而不是用patch去更新,因为patchVnode不会去判断新旧节点是否有text和children或者是空的的情况,但patch会,用patch会不会好点,能应对更多种情况
2回答
-
双越
2021-05-14
第一个问题。这里是在 key 对应上的前提下,去判断 sel 属性是否相等(课程代码都有注释)。这个逻辑之前没做过。
第二个问题。patch 是入口函数,patchVnode 是内部函数,这两者定位就不一样。内部代码不会去调用 path 函数的。
00 -
双越
2021-05-13
额。。。这一大段文字,看懵了。你可以一个一个提问,每个问题尽量简单、直接。
PS:之前也有很多同学大篇的、多问题的提问,我都让他们先拆分问题。
012021-05-13
相似问题