**Do you want to request a *feature* or report a *bug*?**

bug

**What is the current behavior?**

The warning for a failure to initialize state when using `getDerivedStateFromProps` is not as clear as it could be.

This component produces the warning:
> MyComponent: Did not properly initialize state during construction. Expected state to be an object, but it was undefined.`

```js
class MyComponent extends React.Component {
  static getDerivedStateFromProps(nextProps, prevState) {
    return null;
  }
  render() {
    return <span>Foo</span>
  }
}
```

The warning can be resolved by adding `state = {}` either in the class definition or the constructor, or by not using `getDerivedStateFromProps`.

See https://github.com/reactjs/reactjs.org/issues/796 for more detail on why this warning message can be counter-intuitive.

Since the [warning is specific](https://github.com/facebook/react/blob/b548b3cd640dbd515f5d67dafc0216bb7ee0d796/packages/react-reconciler/src/ReactFiberClassComponent.js#L509-L510) to the use of `getDerivedStateFromProps` and not triggered by any other state or lifecycle methods, and state initialization isn't required for other state methods like `this.setState`, it would make sense to me to mention `getDerivedStateFromProps` explicitly in the warning.

Here's a proposal for a new warning message:
> MyComponent: Component state must be initialized when using getDerivedStateFromProps. Expected state to be an object, but it was undefined.

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

React >= 16.3.0

this.contextValueStack[index] = previousValue;
    if (__DEV__) {
      
      (this.contextProviderStack: any)[index] = provider;
    }
    // Mutate the current value.
    context._currentValue = provider.props.value;
  }
  popProvider<T>(provider: ReactProvider<T>): void {
    const index = this.contextIndex;
    if (__DEV__) {
      warningWithoutStack(
        index > -1 && provider === (this.contextProviderStack: any)[index],
        'Unexpected pop.',
      );
    }
    const context: ReactContext<any> = this.contextStack[index];
    const previousValue = this.contextValueStack[index];
    // "Hide" these null assignments from Flow by using `any`
    // because conceptually they are deletions--as long as we
    // promise to never access values beyond `this.contextIndex`.
    this.contextStack[index] = (null: any);
    this.contextValueStack[index] = (null: any);
    if (__DEV__) {
      (this.contextProviderStack: any)[index] = (null: any);
    }
    this.contextIndex--;
    // Restore to the previous value we stored as we were walking down.
    context._currentValue = previousValue;
  }