<!--
  Please provide a clear and concise description of what the bug is. Include
  screenshots if needed. Please test using the latest version of the relevant
  React packages to make sure your issue has not already been fixed.
-->

React version: 17.0.1

## Steps To Reproduce

1. run the project: https://github.com/lifeiscontent/immutable-todo
2. open react dev tools and set the highlight updates when components render option.
3. add changes to the todos
4. see no updates are displayed via React dev tools

<!--
  Your bug will get fixed much faster if we can run your code and it doesn't
  have dependencies other than React. Issues without reproduction steps or
  code examples may be immediately closed as not actionable.
-->

Link to code example:

https://github.com/lifeiscontent/immutable-todo

<!--
  Please provide a CodeSandbox (https://codesandbox.io/s/new), a link to a
  repository on GitHub, or provide a minimal code example that reproduces the
  problem. You may provide a screenshot of the application if you think it is
  relevant to your bug report. Here are some tips for providing a minimal
  example: https://stackoverflow.com/help/mcve.
-->

## The current behavior

currently, updates are only displayed if the react component is not memoized.


## The expected behavior

all react components should show their updates regardless of memoization. 

This Map is used to e.g. get the display name for a Fiber or schedule an update,
   operations that should be the same whether the current and work-in-progress Fiber is used.
  const idToArbitraryFiberMap: Map<number, Fiber> = new Map();
   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.
  const idToTreeBaseDurationMap: Map<number, number> = new Map();
   When profiling is supported, we store the latest tree base durations for each Fiber.
   This map enables us to filter these times by root when sending them to the frontend.
  const idToRootMap: Map<number, number> = new Map();
   When a mount or update is in progress, this value tracks the root that is being operated on.
  let currentRootID: number = -1;
   Returns the unique ID for a Fiber or generates and caches a new one if the Fiber hasn't been seen before.
   Once this method has been called for a Fiber, untrackFiberID() should always be called later to avoid leaking.
  function getOrGenerateFiberID(fiber: Fiber): number {
    let id = null;
    if (fiberToIDMap.has(fiber)) {
      id = fiberToIDMap.get(fiber);
    } else {
      const {alternate} = fiber;
      if (alternate !== null && fiberToIDMap.has(alternate)) {
        id = fiberToIDMap.get(alternate);
      }
    }
    let didGenerateID = false;
    if (id === null) {
      didGenerateID = true;
      id = getUID();
    }