@samitouri / QOS-React / commits / ba7ba84ec3

Ignore events on not-yet-mounted fibers (#9742)

This isn't necessarily what we want long-term especially with more async, but currently we crash in jsdom in some cases when an img load event gets dispatched synchronously. (Needed for FB-internal D5060180.)

Ben Alpert committed May 26, 2017 at 16:46 UTC ba7ba84ec3991001e481a181338eac37deb0aeac
1 file changed +12
src/renderers/dom/shared/ReactDOMEventListener.js
+12
@@ -14,6 +14,7 @@
14 var EventListener = require('fbjs/lib/EventListener');
15 var PooledClass = require('PooledClass');
16 var ReactDOMComponentTree = require('ReactDOMComponentTree');
17 +var ReactFiberTreeReflection = require('ReactFiberTreeReflection');
18 var ReactGenericBatching = require('ReactGenericBatching');
19 var ReactTypeOfWork = require('ReactTypeOfWork');
20
@@ -178,6 +179,17 @@ var ReactDOMEventListener = {
179 var targetInst = ReactDOMComponentTree.getClosestInstanceFromNode(
180 nativeEventTarget,
181 );
182 + if (
183 + targetInst !== null &&
184 + typeof targetInst.tag === 'number' &&
185 + !ReactFiberTreeReflection.isFiberMounted(targetInst)
186 + ) {
187 + // If we get an event (ex: img onload) before committing that
188 + // component's mount, ignore it for now (that is, treat it as if it was an
189 + // event on a non-React tree). We might also consider queueing events and
190 + // dispatching them after the mount.
191 + targetInst = null;
192 + }
193
194 var bookKeeping = TopLevelCallbackBookKeeping.getPooled(
195 topLevelType,