### Website or app

Please checkout the linked branch not `main`
https://github.com/eps1lon/react-devtools-repro-no-matching-node/tree/repro/elements-leaking
Repro steps and screen recording included in the repro

### Repro steps

1. Clone repro
1. yarn
1. yarn start
1. Open app page
1. open devtools
1. Uncomment the `useEffect` block i.e. add an effect
1. inspect `Component` element
1. comment `useEffect` block i.e. remove the effect
1. Repeat comment/uncomment to see that children grow indefinitely


### How often does this bug happen?

Every time

### DevTools package (automated)

_No response_

### DevTools version (automated)

_No response_

### Error message (automated)

Could not inspect element with id 4

### Error call stack (automated)

_No response_

### Error component stack (automated)

_No response_

### GitHub query string (automated)

_No response_

Might be a duplicate of https://github.com/facebook/react/issues/21436#issuecomment-835406075 since the repro steps are the same. But depending on what the effect is doing, the behavior is different.
const MOUNTING = 1;
  const MOUNTED = 2;
  const UNMOUNTED = 3;
   This function is copied from React and should be kept in sync:
   https:github.com/facebook/react/blob/master/packages/react-reconciler/src/ReactFiberTreeReflection.js
  function isFiberMountedImpl(fiber: Fiber): number {
    let node = fiber;
    let prevNode = null;
    if (!fiber.alternate) {
       If 
       yet
      if ((getFiberFlags(node) & Placement) !== NoFlags) {
        return MOUNTING;
      }
       Thi
      if ((getFiberFlags(node) & Incomplete) !== NoFlags) {
        return UNMOUNTED;
      }
      while (node.return) {
        prevNode = node;
        node = node.return;
        if ((getFiberFlags(node) & Placement) !== NoFlags) {
          return MOUNTING;
        }
         Thi
        if ((getFiberFlags(node) & Incomplete) !== NoFlags) {
          return UNMOUNTED;
        }
         If 
        const isTimedOutSuspense =