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.
constructor() {
          super();
          node.click();
        }
        render() {
          return null;
        }
      }
      let inst;
      ReactDOM.render([<Example key="a" ref={n => (inst = n)} />], container);
      const node = container.firstChild;
      expect(node.tagName).toEqual('DIV');
      node.click();
      expect(ops).toEqual(['A']);
      ops = [];
      
      inst.flip();
      node.click();
      expect(ops).toEqual(['B']);
      ops = [];
      
      inst.tick();
      node.click();
      expect(ops).toEqual(['B']);
      ops = [];