function commitMutationEffects()

in Libraries/Renderer/implementations/ReactFabric-prod.js [5680:5818]


function commitMutationEffects(root, firstChild) {
  for (nextEffect = firstChild; null !== nextEffect; ) {
    root = nextEffect;
    firstChild = root.deletions;
    if (null !== firstChild)
      for (var i = 0; i < firstChild.length; i++) {
        var childToDelete = firstChild[i];
        try {
          a: for (var node = childToDelete; ; ) {
            var current = node;
            if (
              injectedHook &&
              "function" === typeof injectedHook.onCommitFiberUnmount
            )
              try {
                injectedHook.onCommitFiberUnmount(rendererID, current);
              } catch (err) {}
            switch (current.tag) {
              case 0:
              case 11:
              case 14:
              case 15:
                var updateQueue = current.updateQueue;
                if (null !== updateQueue) {
                  var lastEffect = updateQueue.lastEffect;
                  if (null !== lastEffect) {
                    var firstEffect = lastEffect.next,
                      effect = firstEffect;
                    do {
                      var _effect = effect,
                        destroy = _effect.destroy,
                        tag = _effect.tag;
                      if (void 0 !== destroy && 0 !== (tag & 2)) {
                        _effect = current;
                        var nearestMountedAncestor = root;
                        try {
                          destroy();
                        } catch (error) {
                          captureCommitPhaseError(
                            _effect,
                            nearestMountedAncestor,
                            error
                          );
                        }
                      }
                      effect = effect.next;
                    } while (effect !== firstEffect);
                  }
                }
                break;
              case 1:
                safelyDetachRef(current, root);
                var instance = current.stateNode;
                if ("function" === typeof instance.componentWillUnmount)
                  try {
                    (effect = current),
                      (_effect = instance),
                      (_effect.props = effect.memoizedProps),
                      (_effect.state = effect.memoizedState),
                      _effect.componentWillUnmount();
                  } catch (unmountError) {
                    captureCommitPhaseError(current, root, unmountError);
                  }
                break;
              case 5:
                safelyDetachRef(current, root);
                break;
              case 4:
                createChildNodeSet(current.stateNode.containerInfo);
            }
            if (null !== node.child)
              (node.child.return = node), (node = node.child);
            else {
              if (node === childToDelete) break;
              for (; null === node.sibling; ) {
                if (null === node.return || node.return === childToDelete)
                  break a;
                node = node.return;
              }
              node.sibling.return = node.return;
              node = node.sibling;
            }
          }
          var alternate = childToDelete.alternate;
          null !== alternate && (alternate.return = null);
          childToDelete.return = null;
        } catch (error) {
          captureCommitPhaseError(childToDelete, root, error);
        }
      }
    firstChild = root.child;
    if (0 !== (root.subtreeFlags & 6454) && null !== firstChild)
      (firstChild.return = root), (nextEffect = firstChild);
    else
      for (; null !== nextEffect; ) {
        root = nextEffect;
        try {
          var flags = root.flags;
          if (flags & 256) {
            var current$jscomp$0 = root.alternate;
            if (null !== current$jscomp$0) {
              var currentRef = current$jscomp$0.ref;
              null !== currentRef &&
                ("function" === typeof currentRef
                  ? currentRef(null)
                  : (currentRef.current = null));
            }
          }
          switch (flags & 2054) {
            case 2:
              root.flags &= -3;
              break;
            case 6:
              root.flags &= -3;
              commitWork(root.alternate, root);
              break;
            case 2048:
              root.flags &= -2049;
              break;
            case 2052:
              root.flags &= -2049;
              commitWork(root.alternate, root);
              break;
            case 4:
              commitWork(root.alternate, root);
          }
        } catch (error) {
          captureCommitPhaseError(root, root.return, error);
        }
        firstChild = root.sibling;
        if (null !== firstChild) {
          firstChild.return = root.return;
          nextEffect = firstChild;
          break;
        }
        nextEffect = root.return;
      }
  }
}