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

const RefForwardingComponent = React.forwardRef((props, ref) => null);
    const ref = React.createRef();
    ReactNoop.render(
      <div>
        <div />
        <RefForwardingComponent ref={ref} />
        <div />
      </div>,
    );
    ReactNoop.flush();
    expect(ref.current).toBe(null);
  });
  it('should warn if not provided a callback during creation', () => {
    expect(() => React.forwardRef(undefined)).toWarnDev(
      'forwardRef requires a render function but was given undefined.',
    );
    expect(() => React.forwardRef(null)).toWarnDev(
      'forwardRef requires a render function but was given null.',
    );
    expect(() => React.forwardRef('foo')).toWarnDev(
      'forwardRef requires a render function but was given string.',
    );
  });
  it('should warn if no render function is provided', () => {
    expect(React.forwardRef).toWarnDev(
      'forwardRef requires a render function but was given undefined.',
    );
  });
  it('should warn if the render function provided has propTypes or defaultProps attributes', () => {
    function renderWithPropTypes() {