The Wire · Showcase
REACT FAST REFRESH FIXED: MEMO EDITS NOW STICK
By RepoJournal · Filed · About Meta
React's hot reload engine was silently dropping edits to memo comparison functions and lazy wrapper types, forcing full remounts to see changes.
Three connected fixes landed overnight across React's Fast Refresh system. First, edits to a memo's comparison function now take effect immediately [1]. Previously, adding or removing that second argument to memo() was invisible until something else remounted the component tree. The fix required two changes: switching SimpleMemoComponent to MemoComponent when a comparison function appears, and adding MemoComponent to the hot reload type resolution so existing fibers read the new .compare value. Second, lazy() wrapper edits now get caught by the refresh scan [2]. Type changes inside a lazy's inner component (like wrapping it in memo) were missed entirely, and SimpleMemoComponent remounts were getting the wrong fiber tag. Third, React now derives fiber tags from resolved types at mount time [3], preventing the old/new type mismatch errors that broke tree recreation during edits. On the React Native side, the bundle location setting now persists across app restarts [5], and the team is aggressively cleaning up internal exports: src/* mappings are gone [6], the undocumented Touchable base type is removed from public API [7], and a new 'react-native/setup-env' export replaces the special-case InitializeCore import path [8]. Node 21+ test failures also got fixed [4] by working around V8's Proxy stack setter behavior.
Action items
- → Update React to pick up Fast Refresh memo and lazy fixes in your next release facebook/react [plan]
- → Review React Native imports for src/* paths and InitializeCore references, update to new public exports facebook/react-native [plan]
- → Remove any direct references to Touchable base type from your components facebook/react-native [monitor]
References
- [1] [Fast Refresh] Make edits to a memo comparison function take effect ↗ facebook/react
- [2] [Fast Refresh] Find and remount wrapper edits behind lazy() ↗ facebook/react
- [3] [Fast Refresh] Derive the fiber tag from the resolved type when mounting ↗ facebook/react
- [4] [test] Fix Error Proxy stack assignment in Node.js 21+ (#36967) facebook/react
- [5] Persist Change Bundle Location host setting (#57425) facebook/react-native
- [6] Remove src/* exports mapping (#57484) facebook/react-native
- [7] Remove Touchable (base) from public API (#57476) facebook/react-native
- [8] Expose 'react-native/setup-env' to replace InitializeCore (#57475) facebook/react-native
FAQ
- What changed in Meta on July 9, 2026?
- React's hot reload engine was silently dropping edits to memo comparison functions and lazy wrapper types, forcing full remounts to see changes.
- What should Meta teams do about it?
- Update React to pick up Fast Refresh memo and lazy fixes in your next release • Review React Native imports for src/* paths and InitializeCore references, update to new public exports • Remove any direct references to Touchable base type from your components
- Which Meta repositories shipped on July 9, 2026?
- facebook/react, facebook/react-native