From 6e82c5a6ab98b12b3d2904302e38c32f2aeb3392 Mon Sep 17 00:00:00 2001 From: saxon-y <49136621+saxon-y@users.noreply.github.com> Date: Sun, 20 Mar 2022 16:13:01 +0800 Subject: [PATCH] Reflactor multi.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 中间部分解释有点晦涩难懂,我觉得这样解释会好一点 --- docs/diff/multi.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/docs/diff/multi.md b/docs/diff/multi.md index 8ab695b..85c0c69 100644 --- a/docs/diff/multi.md +++ b/docs/diff/multi.md @@ -263,11 +263,9 @@ const existingChildren = mapRemainingChildren(returnFiber, oldFiber); 我们的参照物是:最后一个可复用的节点在`oldFiber`中的位置索引(用变量`lastPlacedIndex`表示)。 -由于本次更新中节点是按`newChildren`的顺序排列。在遍历`newChildren`过程中,每个`遍历到的可复用节点`一定是当前遍历到的`所有可复用节点`中**最靠右的那个**,即一定在`lastPlacedIndex`对应的`可复用的节点`在本次更新中位置的后面。 +并且,我们用变量`oldIndex`表示`遍历到的可复用节点`在`oldFiber`中的位置索引,试想一下,如果`每个可复用的节点`都不需要移动,`oldIndex`的值应该是`递增序列`,反之,如果`不是递增序列`,那么必然存在节点的移动。 -那么我们只需要比较`遍历到的可复用节点`在上次更新时是否也在`lastPlacedIndex`对应的`oldFiber`后面,就能知道两次更新中这两个节点的相对位置改变没有。 - -我们用变量`oldIndex`表示`遍历到的可复用节点`在`oldFiber`中的位置索引。如果`oldIndex < lastPlacedIndex`,代表本次更新该节点需要向右移动。 +所以我们只需要比较`遍历到的可复用节点`在上次更新时是否也在`lastPlacedIndex`对应的`oldFiber`后面,就能知道两次更新中这两个节点的相对位置改变没有,如果`oldIndex < lastPlacedIndex`,代表本次更新该节点需要向右移动。 `lastPlacedIndex`初始为`0`,每遍历一个可复用的节点,如果`oldIndex >= lastPlacedIndex`,则`lastPlacedIndex = oldIndex`。