Extracted from https://github.com/facebook/react/issues/12643.

We're currently diff a host node in the complete phase even if it has bailed out in the begin phase. By itself, this just means we're doing a little bit more work than necessary. But it also has some observable effects. In particular, https://github.com/facebook/react/issues/13424 (which by itself would be very rare and probably not worth fixing) is made worse because we end up committing update to inputs from another component.

I have a fix for this in https://github.com/facebook/react/pull/13423. Filing this for posterity.
const React = require('react');
const ReactDOM = require('react-dom');
const PropTypes = require('prop-types');
describe('ReactDOMFiber', () => {
  let container;
  beforeEach(() => {
    container = document.createElement('div');
  });
  it('should render strings as children', () => {
    const Box = ({value}) => <div>{value}</div>;
    ReactDOM.render(<Box value="foo" />, container);
    expect(container.textContent).toEqual('foo');
  });
  it('should render numbers as children', () => {
    const Box = ({value}) => <div>{value}</div>;
    ReactDOM.render(<Box value={10} />, container);
    expect(container.textContent).toEqual('10');
  });
  it('should be called a callback argument', () => {
    
    let called = false;
    ReactDOM.render(<div>Foo</div>, container, () => (called = true));
    expect(called).toEqual(true);
    
    called = false;
    ReactDOM.render(<div>Foo</div>, container, () => (called = true));
    expect(called).toEqual(true);
  });
  it('should call a callback argument when the same element is re-rendered', () => {
    class Foo extends React.Component {