@@ -1129,31 +1129,32 @@ export function attach(
11291129
11301130 function getReplayFiberID ( fiber : Fiber ) {
11311131 const id = getReplayPersistentID ( fiber ) ;
1132- if ( ! fiber . alternate ) {
1132+
1133+ let alternateFiber ;
1134+ if ( fiber . alternate ) {
1135+ // There may be an older version of the fiber, already attached
1136+ alternateFiber = fiber . alternate ;
1137+ } else if ( window . unmountedFiberAlternates ?. has ( fiber ) ) {
1138+ // Or, React may have already deleted the older fiber as part of cleanup,
1139+ // but we stashed it away in the `onCommitFiberUnmount` callback before
1140+ // React actually deleted it. Look it up as provided by the eval wrapper.
1141+ alternateFiber = window . unmountedFiberAlternates . get ( fiber ) ;
1142+ }
1143+
1144+ if ( ! alternateFiber ) {
11331145 return id ;
11341146 }
1135- const alternateId = getReplayPersistentID(fiber.alternate);
1147+
1148+ // Our IDs are numeric, so older fibers will have a lower ID.
1149+ // Prefer the older fiber's ID if it exists.
1150+ const alternateId = getReplayPersistentID ( alternateFiber ) ;
11361151 return Math . min ( id , alternateId ) ;
11371152 }
11381153
11391154 // Returns the unique ID for a Fiber or generates and caches a new one if the Fiber hasn't been seen before.
11401155 // Once this method has been called for a Fiber, untrackFiberID() should always be called later to avoid leaking.
11411156 function getOrGenerateFiberID(fiber: Fiber): number {
1142- let id = null ;
1143- if ( fiberToIDMap . has ( fiber ) ) {
1144- id = fiberToIDMap . get ( fiber ) ;
1145- } else {
1146- const { alternate} = fiber ;
1147- if ( alternate !== null && fiberToIDMap . has ( alternate ) ) {
1148- id = fiberToIDMap . get ( alternate ) ;
1149- }
1150- }
1151-
1152- let didGenerateID = false;
1153- if (id === null) {
1154- didGenerateID = true ;
1155- id = getReplayFiberID ( fiber ) ;
1156- }
1157+ const id = getReplayFiberID ( fiber ) ;
11571158
11581159 // This refinement is for Flow purposes only.
11591160 const refinedID = ( ( id : any ) : number ) ;
@@ -1174,17 +1175,6 @@ export function attach(
11741175 }
11751176 }
11761177
1177- if ( __DEBUG__ ) {
1178- if ( didGenerateID ) {
1179- debug (
1180- 'getOrGenerateFiberID()' ,
1181- fiber ,
1182- fiber . return ,
1183- 'Generated a new UID' ,
1184- ) ;
1185- }
1186- }
1187-
11881178 return refinedID ;
11891179 }
11901180
@@ -2021,7 +2011,7 @@ export function attach(
20212011 }
20222012 }
20232013
2024- const persistentID = getReplayFiberID ( fiber ) ;
2014+ const persistentID = getFiberIDUnsafe ( fiber ) ;
20252015 const unsafeID = persistentID ;
20262016 if ( unsafeID = = = null ) {
20272017 // If we've never seen this Fiber, it might be inside of a legacy render Suspense fragment (so the store is not even aware of it).
@@ -4521,6 +4511,7 @@ export function attach(
45214511 getDisplayNameForFiberID ,
45224512 getFiberForNative ,
45234513 getFiberIDForNative ,
4514+ getFiberIDUnsafe ,
45244515 getInstanceAndStyle ,
45254516 getOrGenerateFiberID ,
45264517 getOwnersList ,
0 commit comments