React Native vs Just Native™
I initially wrote this comparison for a friend when he asked me for an opinion on React Native vs. real native apps. I figured I might as well publish it, so here it is!
Context: There’s Android and iOS. Both platforms are mature and have established tools, IDEs, languages, practices, and dev communities.
The reasons React Native has gained popularity are:
- Developers who already know JavaScript or React can create mobile apps easily. Easily = without having to learn a lot of Java, Android Studio, Android’s standard API, Xcode, Swift, iOS’s standard API, etc (however a small amount of knowledge is still required and a programmer who knows all 3 will always perform better).
- JavaScript and React are easier to learn than Android and iOS. Thus, RN is more attractive to beginners who want to create cross-platform apps. Even developing for just 1 platform might seem easier with RN.
Both (1) and (2) save time, which in turn saves money. However, “no free lunch” — there are drawbacks.
At a high level, choosing between the two is a matter of choosing between “lower quality but faster” (React Native) and “slower but better” (Just Native™). The 2 choices are not equal though. In some cases the drawbacks of React Native might be worth it, in some cases it might not.
React Native — The good parts
- Quicker time to get from start to finish
- It is mostly “write once”, run on both Android and iOS
- JavaScript and React are easier to learn than Java, Android, Swift, iOS
- During development, iterations are quicker because changes to the code can be previewed instantly (for Android/iOS you have to recompile and reinstall the app)
React Native — The bad parts
- A minimal amount of Android or iOS knowledge is still required
- Less mature ecosystem: there are fewer libraries available, the libraries might not be mature enough (not tested enough and buggy or inefficient), RN itself might have bugs and need frequent updates
- Worse UI/UX: some components will look different, animations feel different (compared to the other native apps on the phone)
- Harder to maintain the native UI look
Just Native™ — The good parts
- Native UI with consistent components, animations, UX
- Many established libraries, tools, books, resources to aid development
- Support from the platform manufacturer itself (Google or Apple), not someone who doesn’t have stakes in a mobile OS (Facebook) and not from the open source community
Just Native™—The bad parts
- Development takes the combined effort of both Android and iOS (in time and money)
- Developers must know both Android and iOS for cross-platform apps
- Developers must have deeper knowledge into the OS, its framework, how it works
From my experience:
- It really is quicker if you use RN, but definitely not 2x as quick. You’ll save time on some things, but spend more time on others.
- RN is not independent from Android and iOS. To build a RN app, you still need to set up Android Studio / Xcode to build a native app. A RN app is still a native app, it’s just that that app runs React Native and your JavaScript instead of your Java/Swift.
- The 2 choices are not exclusive: Instagram for example has mostly native apps and uses RN in a few places such as the ad previews for advertising campaigns.
- There are not many libraries for React Native, and out of those that exist, many of them are not mature. For any serious project, there will eventually be a need to get dirty and write some Java / Swift as well.
- RN apps usually look and feel differently, albeit barely noticeably. It’s extremely hard to reproduce in JavaScript the look and feel (aesthetics and animations) of the native UI of Android / iOS.