Table of Contents
React Native, next to Flutter and Ionic, was called a revolution in cross-platform app development and delivering great mobile experience.
Code repository that's shareable between platforms? Reusable components? That definitely sounds tempting.
React Native has been praised for its “Learn once, write anything” objective which means you get a native look and feel of your app for both iOS and Android, and you may also include platform-specific modules.
For a developer with experience in JavaScript, and React itself, it is easy to take up React Native and start building on it right away.
Some time ago one of our React Native apps, Guild, went public. (Update: Guild has been recognized by Red Herring as one of the 2019 Top 100 European Startups.)
We’re extremely proud of how the app turns out and can’t wait to write more of them. Our devs and some of our clients are fully on board the React Native train and in this post, I will tell you exactly why is that: from a perspective of a business owner and a JavaScript developer. As well as some React Native advantages and limitations.
Business Perspective on React Native
Unlike other cross-platform frameworks like Ionic, the Facebook team stresses they acknowledge the differences between different platforms and React Native reflects that. Therefore, you can still include modules specific for iOS and Android like status bars, navigation, or access to native elements like camera and contacts are built according to the platform.
Using libraries such as React Native for Web or ReactXP allows a developer to build a cross-platform app that runs on the Web, so there’s no need to build separate apps. We used ReactXP in one of our projects, and it felt like we were getting the Web version for free. That’s pretty amazing.
Note that using React Native DOES NOT mean you will not need any help from a native developer. If your app includes many different native features, some work on their side may be required.
Now, when it comes to team building...
Your frontend web developer can actually become a mobile developer without the need to learn iOS’s Swift or Java/Kotlin for Android. With some knowledge of native UI elements, React, and some platform-specific patterns, React Native is easy to pick up. That is a game changer in terms of building a team as your app will require just one instead of two (or even three if you’re also to conquer the Web).
You can hire JS developers who will be able to deliver for all platforms. Therefore, it is much easier for them to exchange knowledge, conduct a code review, and understand the code. What a difference it makes in terms of time and cost! Not to mention that React Native is all about bringing agility of web development to cross-platform development, with native results.
About the performance…
Some may argue that nothing will surpass the performance of native apps. It may be even true, but products written with React Native are almost identical in how they perform. Sometimes even better. In his great article comparing Native iOS and RN, John Calderaio says:
“[According to...] the data I collected through measuring both of the application’s CPU, GPU, and Memory during the tasks in each of the four tabs, the apps are also almost identical in how they perform. (...) React Native, winning two out of three categories, comes in first place as the better performing platform.”
Wrapping-up: Pros and Cons for Business
Pros:
- Time and cost efficiency
- Native look and feel of your apps
- Sharing the codebase for iOS, Android, and the Web (with ReactXP and React Native for Web)
- One team for multiple platforms
- Awesome performance
Cons:
- Need for expertise from a native developer for some platform-specific modules
Bloomberg is a great example of a performant app written with React NativeImage source: belitsoft.com
Developer’s Perspective on React Native
When you start working with React, typically you go with a bundler like Webpack and spend some time considering the right bundling modules for your app. React Native is different, and yet it works similarly to React. It comes with everything you need to just sit down and start writing your code.
Hot/Live reload (similar to Instant Run on Android) is a beloved, killer feature that allows a developer to see introduced changes right away without complete rebuilding of the app. You don’t have to constantly check the results of actions you take which greatly boosts productivity and saves time on compilation.
When it comes to scrolling, animations, buttons, text inputs, and other elements, React Native gives an efficient recipe that allows developers to conduct basic tasks easily. Component usage is heavily simplified in comparison to native development and it’s huge.
Adding native modules may not be a piece of cake though.
Whereas there are countless libraries to choose from for iOS and Android, React Native does not exactly shine here. The list of third-party libraries and components is quite long, but in many cases, they leave a lot to be desired. When working on modules like device sensors or push notifications, there is a chance you may need some help from a native programmer.
Truth be told, the Facebook team together with outside collaborators and a thriving population of active users constantly works on React Native making it better every day with over 2500 commits from 500 contributors last year.
According to Sophie Alpert, Engineering Manager on React:
“We're working on a large-scale re-architecture of React Native to make the framework more flexible and integrate better with native infrastructure in hybrid JavaScript/native apps.”
Even if it may happen that you’ll need to hack some existing solution or write something from scratch, this will happen more and more rarely.
Wrapping-up: Pros and Cons for a Developer
Pros:
- You’re a web AND mobile developer!
- Great productivity
- Easy setup
- Simplified usage of styling components
- Hot/live reloading feature
Cons:
- Need of hacking some existing solutions or creating new ones from scratch
- Documentation still needs an upgrade
Tell me if I’m wrong, but all React Native advantages surpass its disadvantages. There is a whole community working on new releases almost every week. It was enlightening to use it in development here at Monterail and I believe it may work as well for most mobile projects out there: