React Native is known as a really promising technology since developers can deliver high-quality apps for Android and iOS using a fraction of the resources the native approach would take.
We’ve built a few apps with React Native and pointed out what we like and don’t like about it.
So, here’s our list of React Native pros and cons to help you make a better informed decision.
Pros of using React Native for your mobile app
Firstly, let’s highlight the main benefits of React Native to see whether it is on a target.
One team – two platforms
With React Native you don’t have to hire two separate teams to build apps for iOS and Android. React Native devs handle both versions. As the result, the team is smaller, costs are lower and the project easier to manage.
You can share a significant portion of your codebase between the two platforms. Walmart, for example, reported 95% code reuse for its mobile app. If your app has a lot of features that are radically different for iOS and Android (e.g. payments or TouchID), the number can drop down to about 30%. Still, this is a huge cost saving.
Moreover, you can use some of that code to create a website on React (the predecessor of RN that shares the same development paradigm).
The common codebase is also easier to debug as Android and iOS versions share a lot of bugs.
100% native UI
With older cross-platform solutions such as Ionic, you get a web application wrapped in a thin native container. It even runs inside of a borderless “browser” called WebView.
That’s why cross-platform UI/UX often feels off when compared to native apps.
But in React Native, UI is made of native components which provide the platforms’ trademark look. That’s why even native developers can hardly tell RN apps from native solutions.
For a long time, complex animations were the framework’s Achilles’ heels. But this problem was mostly solved with the introduction of Animated library.
With native apps, debugging is a long and tedious process. But React Native supports hot reloading. It allows developers to immediately see how the changes to the code affect the app while it’s running. This feature saves a ton of time and makes developers happier 🙂
Updates without app store approvals
Mobile apps often release a new version every two weeks. But each time you push an update, you have to wait for App Store/Play Market to approve it. Although Apple has taken steps to reduce review times, you’ll still have to wait several days.
Number of days to get an App Store approval according to appreviewtimes.com
With React Native, your updates can bypass App Store entirely.
This means you can distribute updates at any time and speed up your release cycle a bit.
Cons of using React Native for your mobile app
And React Native drawbacks (I would say ‘specific features’) are:
Dependence on Facebook
One of RN’s weaknesses come from one of its biggest strengths.
If one day Facebook ceases support of React Native, the framework would quickly fall behind both iOS and Android.
However, this is a highly unlikely event. Other large companies, such as Airbnb, would be happy to take up the torch.
In most cases, React Native performance is on par with native apps.
But there are some things (like UI) that have to be created with Java/Swift/Objective-C. These native modules communicate with the JS part of your app using asynchronous ‘bridges’.
With each pass along these bridges, your app takes a tiny performance hit. If your app has a lot of complex interactions, this can noticeably degrade its performance.
Few third-party components
Android and iOS have incredibly large communities behind them. If there’s a frequent problem, you’ll most likely find a ready-made solution in the form of a third-party library or an API.
React Native is a much smaller platform that’s still in its infancy.
Obviously, there aren’t that many third-party components that work with it. And some of them might behave not quite as you’ve expected.
A lot of components have tiny communities behind them, the creators can’t always update them frequently.
Need for native developers
You can solve some of the issues above with the help of native modules.
But implementing them requires Java/Objective-C/Swift expertise. So you’ll still occasionally need some help from native developers. And this might be problematic for startups and small front-end studios.
Google and Apple constantly introduce new features with updates to their OS.
React Native team does its best to bring new functionality to the platform. But that takes time.
So if you want to use some of the fancy features like Face ID in your app, you’ll either have to create native bridges or wait until somebody in RN community comes up with a solution.
Also, React Native only supports Android 4.1+ and iOS 8.0+. So if you have to support older OS versions, you’ll need to find another solution.
Read more on the detailed comparison of React Native and native approach.