@@ -182,41 +182,45 @@ const compareComponents = (oldType, newType, setNewType, baseType) => {
182182const knownPairs = new WeakMap ( ) ;
183183const emptyMap = new WeakMap ( ) ;
184184
185+ const getKnownPair = ( oldType , newType ) => {
186+ const pair = knownPairs . get ( oldType ) || emptyMap ;
187+ return pair . get ( newType ) ;
188+ } ;
189+
185190export const hotComponentCompare = ( oldType , preNewType , setNewType , baseType ) => {
186191 const hotActive = hotComparisonOpen ( ) ;
187192 const newType = configuration . integratedResolver ? resolveType ( preNewType ) : preNewType ;
188- let result = oldType === newType ;
189193
190- if ( ! hotActive ) {
191- return result ;
192- }
194+ // TODO: find out the root cause
195+ // we could not use "fast result" here - go a full part to update a fiber.
196+ // const knownType = getKnownPair(oldType, newType);
197+ // if (knownType !== undefined) {
198+ // return knownType;
199+ // }
193200
194- if (
195- ! isReloadableComponent ( oldType ) ||
196- ! isReloadableComponent ( newType ) ||
197- isColdType ( oldType ) ||
198- isColdType ( oldType ) ||
199- ! oldType ||
200- ! newType ||
201- 0
202- ) {
203- return result ;
204- }
201+ let result = oldType === newType ;
205202
206- // comparison should be active only if hot update window
207- // or it would merge components it shall not
208203 if ( hotActive ) {
204+ // pre fail components which could not be merged
205+ if (
206+ ! isReloadableComponent ( oldType ) ||
207+ ! isReloadableComponent ( newType ) ||
208+ isColdType ( oldType ) ||
209+ isColdType ( oldType ) ||
210+ ! oldType ||
211+ ! newType ||
212+ 0
213+ ) {
214+ return result ;
215+ }
216+
209217 result = compareComponents ( oldType , newType , setNewType , baseType ) ;
210218 const pair = knownPairs . get ( oldType ) || new WeakMap ( ) ;
211219 pair . set ( newType , result ) ;
212220 knownPairs . set ( oldType , pair ) ;
213221 return result ;
214222 }
215223
216- if ( result ) {
217- return result ;
218- }
219-
220- const pair = knownPairs . get ( oldType ) || emptyMap ;
221- return pair . get ( newType ) || false ;
224+ // result - true if components are equal, or were "equal" at any point in the past
225+ return result || getKnownPair ( oldType , newType ) || false ;
222226} ;
0 commit comments