<!--
  Note: if the issue is about documentation or the website, please file it at:
  https://github.com/reactjs/reactjs.org/issues/new
-->

**Do you want to request a *feature* or report a *bug*?**
bug
**What is the current behavior?**
example: https://codesandbox.io/s/04393o3k6w
If the `LogProps` is child of `M.Provider`, and `M.Consumer` is used in its children.
When the `M.Provider` is updating, even if the `LogProps` is wrapped in a component that  never updates, it can still be triggered by the callback of `React.forwardRef`, and updates the `LogProps`.

**What is the expected behavior?**
the `LogProps` shouldn't update when the root component had updated, whether or not  `M.Consumer` is used in its children;

**Which versions of React, and which browser / OS are affected by this issue? Did this work in previous versions of React?**

it's used react@16.3

componentName,
          );
          didWarnAboutBadClass[componentName] = true;
        }
      }
      ReactCurrentOwner.current = workInProgress;
      value = fn(props, context);
    } else {
      value = fn(props, context);
    }
    
    workInProgress.effectTag |= PerformedWork;
    if (
      typeof value === 'object' &&
      value !== null &&
      typeof value.render === 'function' &&
      value.$$typeof === undefined
    ) {
      const Component = workInProgress.type;
      
      workInProgress.tag = ClassComponent;
      workInProgress.memoizedState =
        value.state !== null && value.state !== undefined ? value.state : null;
      const getDerivedStateFromProps = Component.getDerivedStateFromProps;
      if (typeof getDerivedStateFromProps === 'function') {
        applyDerivedStateFromProps(
          workInProgress,
          getDerivedStateFromProps,
          props,
        );