|
9 | 9 | needsStateRestore,
|
10 | 10 | restoreStateIfNeeded,
|
11 | 11 | }from'./ReactDOMControlledComponent';
|
| 12 | +import{enableDiscreteEventFlushingChange}from'shared/ReactFeatureFlags'; |
12 | 13 |
|
13 | 14 | // Used as a way to call batchedUpdates when we don't have a reference to
|
14 | 15 | // the renderer. Such as when we're dispatching events or if third party
|
@@ -87,9 +88,32 @@ export function discreteUpdates(fn, a, b, c, d) {
|
87 | 88 | }
|
88 | 89 | }
|
89 | 90 |
|
90 |
| -exportfunctionflushDiscreteUpdatesIfNeeded(){ |
91 |
| -if(!isInsideEventHandler){ |
92 |
| -flushDiscreteUpdatesImpl(); |
| 91 | +letlastFlushedEventTimeStamp=0; |
| 92 | +exportfunctionflushDiscreteUpdatesIfNeeded(timeStamp: number){ |
| 93 | +if(enableDiscreteEventFlushingChange){ |
| 94 | +// event.timeStamp isn't overly reliable due to inconsistencies in |
| 95 | +// how different browsers have historically provided the time stamp. |
| 96 | +// Some browsers provide high-resolution time stamps for all events, |
| 97 | +// some provide low-resolution time stamps for all events. FF < 52 |
| 98 | +// even mixes both time stamps together. Some browsers even report |
| 99 | +// negative time stamps or time stamps that are 0 (iOS9) in some cases. |
| 100 | +// Given we are only comparing two time stamps with equality (!==), |
| 101 | +// we are safe from the resolution differences. If the time stamp is 0 |
| 102 | +// we bail-out of preventing the flush, which can affect semantics, |
| 103 | +// such as if an earlier flush removes or adds event listeners that |
| 104 | +// are fired in the subsequent flush. However, this is the same |
| 105 | +// behaviour as we had before this change, so the risks are low. |
| 106 | +if( |
| 107 | +!isInsideEventHandler&& |
| 108 | +(timeStamp===0||lastFlushedEventTimeStamp!==timeStamp) |
| 109 | +){ |
| 110 | +lastFlushedEventTimeStamp=timeStamp; |
| 111 | +flushDiscreteUpdatesImpl(); |
| 112 | +} |
| 113 | +}else{ |
| 114 | +if(!isInsideEventHandler){ |
| 115 | +flushDiscreteUpdatesImpl(); |
| 116 | +} |
93 | 117 | }
|
94 | 118 | }
|
95 | 119 |
|
|
0 commit comments