The Wire · Showcase
REACT DEVTOOLS FIXES BFCACHE LIFECYCLE CRASHES, BROWSER API LANDS
By RepoJournal · Filed · About Meta
React DevTools just patched a critical lifecycle race that crashes during browser back/forward cache navigation, while React DOM gains a new browser() API for server-side suspense boundaries.
The DevTools team shipped three targeted fixes addressing inconsistency errors that cascade when Chrome freezes the JavaScript heap during BFCache transitions [1]. The root issue: Chrome kills the DevTools port while the backend stays alive, creating a state React never expects. Simultaneously, they're now creating extension panels before React detection, which solves a long-standing UX bug where panels wouldn't appear unless a React app was already loaded [2]. Type safety got a boost too with FlowFixMe removal from the extension lifecycle, catching real-world errors that only surfaced during BFCache sessions [3]. On the feature front, ReactDOM now exports a browser() API that returns a usable suspending on the server but resolving in the browser, codifying a common pattern for client-only components [4]. Over in React Native, XMLHttpRequest.setRequestHeader now appends duplicate headers per spec instead of overwriting them [5], a breaking change that fixes compatibility with libraries like Sentry that depend on append behavior. The Native team also hardened their build pipeline: new SwiftPM iOS e2e workflows for RNTester and HelloWorld [6], a codegen fix preventing spurious Xcode failures when no native specs are present [7], and strict API enforcement via updated ReactPrivate imports for 0.87 [8].
One email a day. Unsubscribe in one click.
Keep up with Meta in about 3 minutes a day: what actually shipped — the commits, pull requests, releases, and security advisories that matter.
One email a day. Unsubscribe in one click. Read a past issue →
Action items
- → Update to latest DevTools if you use BFCache or navigate heavily in dev mode facebook/react [plan]
- → Flag XMLHttpRequest.setRequestHeader changes in integration tests before upgrading React Native facebook/react-native [plan]
- → Review ReactPrivate import paths if targeting React Native 0.87 facebook/react-native [monitor]
References
- [1] [DevTools] Reset extension backend on pagehide ↗ facebook/react
- [2] [DevTools] Create extension panels before React detection ↗ facebook/react
- [3] [DevTools] Remove FlowFixMe from extension lifecycle ↗ facebook/react
- [4] Add ReactDOM `browser()` API ↗ facebook/react
- [5] Fix XMLHttpRequest.setRequestHeader to append duplicate headers per spec facebook/react-native
- [6] CI: add SwiftPM iOS e2e workflows (RNTester, HelloWorld, new app) (#57659) facebook/react-native
- [7] fix(codegen): empty ReactCodegen input_files when no Native spec files found (#57759) facebook/react-native
- [8] Update ReactPrivate and InitializeCore imports (0.87 Strict API) (#36986) (#57753) facebook/react-native