Open 1adybug opened 2 years ago
function commitWork(fiber) { if (!fiber) { return } let domParentFiber = fiber.parent while (!domParentFiber.dom) { domParentFiber = domParentFiber.parent } const domParent = domParentFiber.dom if ( fiber.effectTag === "PLACEMENT" && fiber.dom != null ) { domParent.appendChild(fiber.dom) } else if ( fiber.effectTag === "UPDATE" && fiber.dom != null ) { updateDom( fiber.dom, fiber.alternate.props, fiber.props ) } else if (fiber.effectTag === "DELETION") { commitDeletion(fiber, domParent) // function should return at this moment return } commitWork(fiber.child) commitWork(fiber.sibling) }
let's call the fiber to be deleted oldFiber
oldFiber
if commitWork function didnt return after commitDeletion(oldFiber, domParent), it will commitWork(oldFiber.child) and commitWork(oldFiber.sibling).
commitWork
commitDeletion(oldFiber, domParent)
commitWork(oldFiber.child)
commitWork(oldFiber.sibling)
This may cause a terrible bug, because u dont know what type is oldFiber.child.effectTag or oldFiber.sibiling.effectTag
oldFiber.child.effectTag
oldFiber.sibiling.effectTag
and commitWork function dont know the two fibers are old fibers and will treat them as current fiber to process.
let's call the fiber to be deleted
oldFiber
if
commitWork
function didnt return aftercommitDeletion(oldFiber, domParent)
, it willcommitWork(oldFiber.child)
andcommitWork(oldFiber.sibling)
.This may cause a terrible bug, because u dont know what type is
oldFiber.child.effectTag
oroldFiber.sibiling.effectTag
and
commitWork
function dont know the two fibers are old fibers and will treat them as current fiber to process.