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.

React Native is based on JavaScript, one of the most popular programming languages in the world. So finding talent for an RN project shouldn’t be very hard. If you have experience with creating web applications (especially using ReactJS), you can apply existing skills to quickly expand into mobile.

It’s much easier to maintain React Native than native apps as you can keep a single team for both versions.

  • Faster development

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.

  • Native-like performance

React Native apps render their UI using native APIs. As the result, their performance is in most cases on par with native iOS/Android apps. Moreover, the JavaScript logic is executed on a separate thread without blocking the UI rendering.

For a long time, complex animations were the framework’s Achilles’ heels. But this problem was mostly solved with the introduction of Animated library.

  • Hot reloading

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.

iOS app store

Number of days to get an App Store approval according to

With React Native, your updates can bypass App Store entirely.

JavaScript apps can automatically check for the updates using services such as AppHub and download the newest version available.

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.

  • Performance hit

In most cases, React Native performance is on par with native apps.

An RN app is JavaScript for the most part.

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.

  • Feature lag

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.

  • 9