@@ -261,74 +261,74 @@ function scheduleFibersWithFamiliesRecursively(
261261 staleFamilies : Set < Family > ,
262262) : void {
263263 if ( __DEV__ ) {
264- const { alternate, child, sibling, tag, type} = fiber ;
264+ do {
265+ const { alternate, child, sibling, tag, type} = fiber ;
265266
266- let candidateType = null ;
267- switch ( tag ) {
268- case FunctionComponent :
269- case SimpleMemoComponent :
270- case ClassComponent :
271- candidateType = type ;
272- break ;
273- case ForwardRef :
274- candidateType = type . render ;
275- break ;
276- default :
277- break ;
278- }
267+ let candidateType = null ;
268+ switch ( tag ) {
269+ case FunctionComponent :
270+ case SimpleMemoComponent :
271+ case ClassComponent :
272+ candidateType = type ;
273+ break ;
274+ case ForwardRef :
275+ candidateType = type . render ;
276+ break ;
277+ default :
278+ break ;
279+ }
279280
280- if ( resolveFamily === null ) {
281- throw new Error ( 'Expected resolveFamily to be set during hot reload.' ) ;
282- }
281+ if ( resolveFamily === null ) {
282+ throw new Error ( 'Expected resolveFamily to be set during hot reload.' ) ;
283+ }
283284
284- let needsRender = false ;
285- let needsRemount = false ;
286- if ( candidateType !== null ) {
287- const family = resolveFamily ( candidateType ) ;
288- if ( family !== undefined ) {
289- if ( staleFamilies . has ( family ) ) {
290- needsRemount = true ;
291- } else if ( updatedFamilies . has ( family ) ) {
292- if ( tag === ClassComponent ) {
285+ let needsRender = false ;
286+ let needsRemount = false ;
287+ if ( candidateType !== null ) {
288+ const family = resolveFamily ( candidateType ) ;
289+ if ( family !== undefined ) {
290+ if ( staleFamilies . has ( family ) ) {
293291 needsRemount = true ;
294- } else {
295- needsRender = true ;
292+ } else if ( updatedFamilies . has ( family ) ) {
293+ if ( tag === ClassComponent ) {
294+ needsRemount = true ;
295+ } else {
296+ needsRender = true ;
297+ }
296298 }
297299 }
298300 }
299- }
300- if ( failedBoundaries !== null ) {
301- if (
302- failedBoundaries . has ( fiber ) ||
303- // $FlowFixMe[incompatible-use] found when upgrading Flow
304- ( alternate !== null && failedBoundaries . has ( alternate ) )
305- ) {
306- needsRemount = true ;
301+ if ( failedBoundaries !== null ) {
302+ if (
303+ failedBoundaries . has ( fiber ) ||
304+ // $FlowFixMe[incompatible-use] found when upgrading Flow
305+ ( alternate !== null && failedBoundaries . has ( alternate ) )
306+ ) {
307+ needsRemount = true ;
308+ }
307309 }
308- }
309310
310- if ( needsRemount ) {
311- fiber . _debugNeedsRemount = true ;
312- }
313- if ( needsRemount || needsRender ) {
314- const root = enqueueConcurrentRenderForLane ( fiber , SyncLane ) ;
315- if ( root !== null ) {
316- scheduleUpdateOnFiber ( root , fiber , SyncLane ) ;
311+ if ( needsRemount ) {
312+ fiber . _debugNeedsRemount = true ;
317313 }
318- }
319- if ( child !== null && ! needsRemount ) {
320- scheduleFibersWithFamiliesRecursively (
321- child ,
322- updatedFamilies ,
323- staleFamilies ,
324- ) ;
325- }
326- if ( sibling !== null ) {
327- scheduleFibersWithFamiliesRecursively (
328- sibling ,
329- updatedFamilies ,
330- staleFamilies ,
331- ) ;
332- }
314+ if ( needsRemount || needsRender ) {
315+ const root = enqueueConcurrentRenderForLane ( fiber , SyncLane ) ;
316+ if ( root !== null ) {
317+ scheduleUpdateOnFiber ( root , fiber , SyncLane ) ;
318+ }
319+ }
320+ if ( child !== null && ! needsRemount ) {
321+ scheduleFibersWithFamiliesRecursively (
322+ child ,
323+ updatedFamilies ,
324+ staleFamilies ,
325+ ) ;
326+ }
327+
328+ if ( sibling === null ) {
329+ break ;
330+ }
331+ fiber = sibling ;
332+ } while ( true ) ;
333333 }
334334}
0 commit comments