-
Notifications
You must be signed in to change notification settings - Fork 556
Open
Description
如题,commit的before mutation阶段,源码分为commitBeforeMutationEffects_begin,commitBeforeMutationEffects_complete,使用subtree的方式进行遍历。除此之外,flushPassiveEffects的遍历方式也有一定变化,大佬有时间可否更新下?
function commitBeforeMutationEffects_begin() {
while (nextEffect !== null) {
var fiber = nextEffect; // TODO: Should wrap this in flags check, too, as optimization
var deletions = fiber.deletions;
if (deletions !== null) {
for (var i = 0; i < deletions.length; i++) {
var deletion = deletions[i];
commitBeforeMutationEffectsDeletion(deletion);
}
}
var child = fiber.child;
if ((fiber.subtreeFlags & BeforeMutationMask) !== NoFlags && child !== null) {
ensureCorrectReturnPointer(child, fiber);
nextEffect = child;
} else {
commitBeforeMutationEffects_complete();
}
}
}
function commitBeforeMutationEffects_complete() {
while (nextEffect !== null) {
var fiber = nextEffect;
{
setCurrentFiber(fiber);
invokeGuardedCallback(null, commitBeforeMutationEffectsOnFiber, null, fiber);
if (hasCaughtError()) {
var error = clearCaughtError();
captureCommitPhaseError(fiber, fiber.return, error);
}
resetCurrentFiber();
}
var sibling = fiber.sibling;
if (sibling !== null) {
ensureCorrectReturnPointer(sibling, fiber.return);
nextEffect = sibling;
return;
}
nextEffect = fiber.return;
}
}
luoguoxiong
Metadata
Metadata
Assignees
Labels
No labels