请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

对于updateChildren里最后一个情况判断不理解

问题一:老师,这个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会不会好点,能应对更多种情况

正在回答 回答被采纳积分+3

2回答

双越 2021-05-14 08:38:16

第一个问题。这里是在 key 对应上的前提下,去判断 sel 属性是否相等(课程代码都有注释)。这个逻辑之前没做过。

第二个问题。patch 是入口函数,patchVnode 是内部函数,这两者定位就不一样。内部代码不会去调用 path 函数的。

0 回复 有任何疑惑可以回复我~
双越 2021-05-13 18:21:08

额。。。这一大段文字,看懵了。你可以一个一个提问,每个问题尽量简单、直接。


PS:之前也有很多同学大篇的、多问题的提问,我都让他们先拆分问题。

0 回复 有任何疑惑可以回复我~
  • 提问者 Darkholme #1
    问题一:为什么updateChildren函数里,最后几行的那个判断sel相等的情况要存在?我认为这个情况已经在之前判断过了。(就是这里我不确定这种情况判断过没有,所以有疑问)
    
    
    问题二:为啥要用patchVnode而不是用patch去更新,因为patchVnode不会去判断新旧节点是否有text和children或者是空的的情况,但patch会,用patch会不会好点,能应对更多种情况
    回复 有任何疑惑可以回复我~ 2021-05-13 18:40:07
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信