The Wire · Showcase
REACT PATCHES HIDDEN COMPONENT STATE BUG, REACT-NATIVE FIXES KEYBOARD TRAP
By RepoJournal · Filed · About Meta
React shipped a critical fix for useSyncExternalStore mutations being missed when subtrees toggle visibility, while React-Native plugged an Android keyboard that won't close on unmount.
The React team landed a surgical fix [1] for a state synchronization bug in Fiber where components using useSyncExternalStore would fall stale after their Activity subtrees were hidden and revealed. The bug occurred because passive effects disconnected on hide, then replayed on reveal without a full render, leaving updateStoreInstance out of sync. This is the kind of mutation phantom that only surfaces under specific visibility patterns and would have caused subtle data inconsistencies in apps relying on external state stores.
On the React-Native desk, the team squashed an annoying Android regression [2] where the keyboard would stay open after a focused TextInput unmounted. The culprit was the unmount cleanup order: TextInputState was unregistered before the blur signal fired, so blur would check if the input was still registered, find nothing, and silently no-op. Simple reordering of those cleanup steps kills it.
The 0.87 release candidate push continues with a Hermes version bump [5] and a scripting fix [6] that corrects how hermes-version tags get written to the build config. React-Native also re-applied a performance module cleanup [3] that removes the legacy performance fallback, requiring the native NativePerformance module instead.
On the React side, a secondary fix landed [4] for scrollIntoView behavior on empty Fragments, ensuring the library handles edge cases like rendering a Fragment with no Host Components inside it.
One email a day. Unsubscribe in one click.
What actually shipped in Meta, written up every day — commits, pull requests, releases, and security advisories.
One email a day. Unsubscribe in one click. Read a past issue →
Action items
- → Pull the React useSyncExternalStore fix if you use external state patterns with hidden subtrees facebook/react [plan]
- → Upgrade React-Native to the latest to close the Android keyboard issue on TextInput unmount facebook/react-native [plan]
- → Monitor 0.87 RC2 stability with the Hermes and performance module changes facebook/react-native [monitor]
References
- [1] [Fiber] Detect useSyncExternalStore mutations missed while Activity tree was hidden ↗ facebook/react
- [2] Blur focused TextInput before unregistering it on unmount (fixes Android keyboard staying open) (#57584) facebook/react-native
- [3] Re-apply "Require the NativePerformance module and drop the legacy performance fallback" (#57609) facebook/react-native
- [4] [DOM] Handle scrolling of empty Fragments below containers ↗ facebook/react
- [5] Bump Hermes version to 250829098.0.16 to align with 0.87 rc2 (#57621) facebook/react-native
- [6] Fix bump-hermes-version.js to write hermes-v prefixed tag to .hermesv1version (#57619) facebook/react-native