The Wire · Showcase
REACT TIGHTENS SERVER-RENDERING COSTS, REACT NATIVE PATCHES GRADLE AND FABRIC CRASHES
By RepoJournal · Filed · About Meta
React's lazy reasons optimization cuts wasted stack allocations on browser-only renders, while React Native fixes three critical crashes in Swift Package Manager, radial gradients, and surface mounting.
React shipped a lazy reasons API for `ReactDOM.browser()` that defers error construction until a server renderer actually needs it [1]. On the client side, rendering pays zero cost for the reason token; Fizz only creates the error when it consumes through `use()` or `abort()`. This is the kind of server-rendering tax cut that adds up across high-traffic surfaces. The React team also corrected a Flight key validation bug where outlines into lazy nodes produced false-positive warnings on non-array children [2], and dropped a noisy empty Fragment `scrollIntoView` warning that users couldn't act on [3].
React Native's 23 commits and 15 PRs this period tackled infrastructure debt. The SwiftPM autolinking plugin contract now supports `scriptPhases`, letting frameworks like expo-constants declare build-time generation without CocoaPods workarounds [5]. A fix for radial-gradient parsing corrected a silent drop of position values when an explicit size preceded them [4]. Most critical: two crash fixes in the Fabric layer. An IllegalStateException in `SurfaceMountingManager.removeViewAt()` arose from the differ emitting inconsistent remove instructions that referenced recycled views no longer backed by ViewGroups [6]. A second fix made interrupted `React.xcframework` swaps recoverable by properly writing the marker file, preventing next builds from linking stale flavors [7].
Jest's resolver now honors Node's preserve-symlinks mode [11], eliminating a resolution mismatch that broke symlinked `node_modules` layouts. The team also added Watchman to CI testing [8], upgraded the React Native example to React 19 [9], and resolved an Istanbul instrumentation dependency tangle [10] that had been blocking AWS CDK users.
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
- → Review lazy reasons API in React 19 stable if you do server rendering facebook/react [plan]
- → Update Jest if you use symlinked node_modules facebook/jest [plan]
- → Upgrade React Native if you have Fabric surface mounting or Swift builds facebook/react-native [plan]
References
- [1] Add lazy reasons to browser() ↗ facebook/react
- [2] [Flight] Transfer key validation of lazy nodes when they are unwrapped ↗ facebook/react
- [3] [DOM] Drop empty Fragment scrollIntoView no-op warning ↗ facebook/react
- [4] Fix radial-gradient position being dropped after an explicit size (#57873) facebook/react-native
- [5] feat(swiftpm): let autolinking plugins declare build-time script phases (#57757) facebook/react-native
- [6] Fix IllegalStateException in SurfaceMountingManager.removeViewAt (#57860) facebook/react-native
- [7] fix: make an interrupted React-Core-prebuilt swap recoverable (#57831) facebook/react-native
- [8] ci: exercise watchman on Node LTS ↗ facebook/jest
- [9] chore: update react-native example ↗ facebook/jest
- [10] Update istanbul dependencies ↗ facebook/jest
- [11] feat(jest-resolve): honor `--preserve-symlinks` / `NODE_PRESERVE_SYMLINKS` in the default resolver ↗ facebook/jest