Hey Devs! 👋
React Native 0.80 is knocking on our doors with its Release Candidate (RC) versions.
Let’s dive into what’s new, what’s been fixed, and what might need some extra love in your projects.
Now with commit links for the curious minds! 😉
Heads-Up! 🚨 (Breaking Changes)
There are always those changes that can break things. Keep an eye on the following:
-
Revamped Welcome Screen: The default
NewAppScreenhas been redesigned and moved toreact-native/new-app-screen(3cf0102007). -
Stricter Imports: With the introduction of
"exports"inpackage.json(319ba0afd2, 9fc2a9b9e6), importing from internal folders (e.g.,react-native/Libraries/...) may no longer work. Stick to official paths! Direct imports fromreact-native/virtualized-listsare now blocked (be8393c41b). -
Component Naming: New ESLint rule (via
eslint-plugin-react-hooksv5.2.0): component names can no longer start with_(4de592756b). -
Android Devs: Lots of modules are now Kotlin! 🤖 If you extended classes like
ReactEditText(cac27d15be),NetworkModule(8726e26348),ReactTextInputManager(ab47834eb1),DevSupportManagerBase(9da485b54c), orReactInstanceDevHelper(09492075e8), you may need to adjust method signatures. Classes likeModuleDataCleaner(6fa1864d52) andDeviceInfoModule(f02607badb) are now internal.ChoreographerCompat(f8b2956437) andStandardCharsets(40b38d0a44) have been deleted. TheloadSplitBundleFromServerfunction was removed from theDevSupportManagerinterface (86cd31eb6b). -
iOS Devs: Configuration helpers like
BridgeModuleBatchDidCompletewere deleted (cbad8aafa5).
New Toys! 🎁 (Features)
New stuff is always exciting!
-
Stricter TypeScript (Optional): Introducing
react-native-strict-api(6ea24f7bb9). Opt-in for enhanced checks. -
Improved
<Image>Support:crossOriginandreferralPolicyheaders now supported viasource.uri(49ea9d80b8). - Radial Gradients: Finally! ✨ (1b45dc8033).
-
Extended CSS Color Support: Includes
hwb()notation (692b05e77d) andrgb(R G B / A)(7441127040). - Legacy Architecture Warning: A warning is shown if the app runs on the old architecture (706b6e878d).
-
ESLint Rule
no-deep-imports: Helps prevent unsafe internal imports (87809d9326). -
Native
URLSearchParams: Core-level query string parsing (af1f1e4fe5). -
Improved Accessibility: New
accessibilityOrderprop for Android and iOS (8cf4d5b531). -
New
onPressMoveonPressable: More gesture control (6df938c72e). -
EventEmitter APIs:
addListenerandremoveListenernow exposed (ff4537c15e). -
compactOption in Babel Preset: Can now disable whitespace removal (86911003dc). - Codegen Utilities Exposed: Codegen functions and types moved to the package root (c7aa3f3fe7).
-
Android-Specific: New prop
screenReaderFocusable(4ce093154d), legacy component warning withYogaMeasureFunction.measure()(9345c88a61), new prop to filter drag-and-drop in TextInputs (d10dd7130c). -
iOS-Specific: New accessibility props:
accessibilityLabelledBy,accessibilityDescribedBy,accessibilityHint(5b5cf0e199).
Bug Cleanup! 🧹 (Fixes)
Bugs? Not today. Here are some key fixes (for commit details, see the original changelog):
-
General: Timers (
setTimeout, etc.) now align more closely with web standards. Improved TypeScript typings, generic support forVirtualizeSectionList, controlled state forSwitch, betterListEmptyComponentrendering, font scaling, andoutline-offsethandling. -
Android: Focused fixes for
TextInput(focus, rendering, keyboard nav, double-selection), layout issues (RTL borders, clipping, keyboard navigation), crashes (parent state, event emitters),nullsafety,content://URI fetch, keyboard focus. -
iOS: View additions via interop layer, multiline text measurement,
ScrollViewinteractions (betterHitTest), crashes inRCTPullToRefreshViewComponentView, inline views with truncated text under New Architecture.
Farewell... 👋 (Deprecations & Removals)
Some items are on their way out:
Android:
-
ReactContextBaseJavaModule.getCurrentActivity()is deprecated (1408c69fd8). -
UIManagerType.DEFAULTis deprecated (useLEGACY) (a8668319ad). -
ResourceDrawableIdHelper.instancehas been removed (8de401c625). - The constructor
EventBeatManager(ReactApplicationContext)has been removed (c97af95a7f). -
FabricSoLoaderis no longer part of the public API (902f82656e). -
(un)registerEventEmitterhas been removed from theEventDispatcherinterface (d1c0f57073). -
TouchesHelperis no longer part of the public API (2196597e2b).
iOS:
-
loadImageForURLis deprecated (use the new signature withcompletionHandlerWithMetadata) (43c9a609de). -
RCT_NEW_ARCH_ENABLEDandRCTSetNewArchEnabledare deprecated (6dd721b258). -
RCTComputeScreenScale(094876367f) andRCTFloorPixelValue(dc97df10a2) have been removed.
Under the Hood ⚙️ (Other Changes)
- Android: Gradle updated to version 8.14.1 (827a6851d0).
- Debugger frontend updated (647af1c4ca).
In a Nutshell 🎶
That’s it! React Native 0.80.0-rc brings a bunch of refinements, continues the Kotlin migration on Android, introduces cool new features (hello, radial gradients!), and fixes several bugs. If you’re interested in diving deeper, the commit links are there for you to explore!
Keep a close eye on the breaking changes, especially if you have custom native code or rely on internal imports. Now it’s time to test and prepare your apps. Happy coding, everyone! 🚀
Stay Tuned! 👀
This review covers everything up to version v0.80.0-rc.3.
As new RC versions are released, I’ll update this post so we can all stay up to date with the latest changes—sound good?
And just a quick behind-the-scenes note: I used a bit of AI help to initially filter and organize the massive changelog. Then, of course, came the human touch—to refine, simplify the language, and make sure everything makes sense for our day-to-day development. 😉
Top comments (0)