### 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.
case PROFILER_NUMBER:
          case PROFILER_SYMBOL_STRING:
            return ElementTypeProfiler;
          default:
            return ElementTypeOtherOrUnknown;
        }
    }
  }
   This is a slightly annoying indirection.
   It is currently necessary because DevTools wants to use unique objects as keys for instances.
   However fibers have two versions.
   We use this set to remember first encountered fiber for each conceptual instance.
  function getPrimaryFiber(fiber: Fiber): Fiber {
    if (primaryFibers.has(fiber)) {
      return fiber;
    }
    const {alternate} = fiber;
    if (alternate != null && primaryFibers.has(alternate)) {
      return alternate;
    }
    primaryFibers.add(fiber);
    return fiber;
  }
  const fiberToIDMap: Map<Fiber, number> = new Map();
  const idToFiberMap: Map<number, Fiber> = new Map();
  const primaryFibers: Set<Fiber> = new Set();
   When profiling is supported, we store the latest tree base durations for each Fiber.
   This is so that we can quickly capture a snapshot of those values if profiling starts.
   If we didn't store these values, we'd have to crawl the tree when profiling started,
   and use a slow path to find each of the current Fibers.