<!--
  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

} else {
        const oldValue = oldProps.value;
        
        
        
        if (
          (oldValue === newValue &&
            (oldValue !== 0 || 1 / oldValue === 1 / newValue)) ||
          (oldValue !== oldValue && newValue !== newValue) 
        ) {
          
          if (oldProps.children === newProps.children) {
            workInProgress.stateNode = 0;
            pushProvider(workInProgress);
            return bailoutOnAlreadyFinishedWork(current, workInProgress);
          }
          changedBits = 0;
        } else {
          changedBits =
            typeof context._calculateChangedBits === 'function'
              ? context._calculateChangedBits(oldValue, newValue)
              : MAX_SIGNED_31_BIT_INT;
          if (__DEV__) {
            warning(
              (changedBits & MAX_SIGNED_31_BIT_INT) === changedBits,
              'calculateChangedBits: Expected the return value to be a ' +
                '31-bit integer. Instead received: %s',
              changedBits,
            );
          }