<!--
  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? Mild DX improvement.

**What is the current behavior?**

Creating an input with an undefined or null value, then later passing a string value, triggers a warning about controlled inputs.

> A component is changing an uncontrolled input of type undefined to be controlled. Input elements should not switch from uncontrolled to controlled (or vice versa)

It's my experience in Reactiflux that this warning is unclear to developers with less familiarity with React, or at least with the "controlled" and "uncontrolled" terms.

it('should warn if value and defaultValue props are specified', () => {
    expect(() =>
      ReactDOM.render(
        <input type="text" value="foo" defaultValue="bar" readOnly={true} />,
        container,
      ),
    ).toErrorDev(
      'A component contains an input of type text with both value and defaultValue props. ' +
        'Input elements must be either controlled or uncontrolled ' +
        '(specify either the value prop, or the defaultValue prop, but not ' +
        'both). Decide between using a controlled or uncontrolled input ' +
        'element and remove one of these props. More info: ' +
        'https://fb.me/react-controlled-components',
    );
    ReactDOM.unmountComponentAtNode(container);
    ReactDOM.render(
      <input type="text" value="foo" defaultValue="bar" readOnly={true} />,
      container,
    );
  });
  it('should warn if controlled input switches to uncontrolled (value is undefined)', () => {
    const stub = (
      <input type="text" value="controlled" onChange={emptyFunction} />
    );
    ReactDOM.render(stub, container);
    expect(() => ReactDOM.render(<input type="text" />, container)).toErrorDev(
      'Warning: A component is changing a controlled input of type text to be uncontrolled. ' +
        'Input elements should not switch from controlled to uncontrolled (or vice versa). ' +
        'Decide between using a controlled or uncontrolled input ' +
        'element for the lifetime of the component. More info: https://fb.me/react-controlled-components\n' +