A Quick Comparison between React Native Apps vs Native Apps(Android/iOS).

shivakumar
6 min readFeb 22, 2022

--

It is no surprise that the marketing trends, tactics, and technologies have drastically changed more in the last five years than in the last 50.

Are you wondering what drives someone to use their smartphone like crazy? The simple answer is: “engaging mobile apps”.

Mobile apps are imperative to the much needed mobility for a digital transformation.

People are increasingly dependent on these apps for a variety of tasks everyday. The apps also prove immensely helpful to deliver a strong self-service experience to customers as well as employees. Additionally, mobile apps are gradually strengthening brand recognition, providing a competitive advantage and most importantly–improving customer engagement.

As the number of mobile users registers a year-on-year growth of 4%, reaching 5.15 billion in 2018, Statista predicts mobile app revenue to be around USD 188.9 billion in 2020. Clearly, looking at the ongoing trend, this figure doesn’t come as a surprise.

If you’re considering building an app for your business, one of the first few questions you may come across is–

Should you go for a native mobile app or a hybrid app?

Let’s have a look based on specific criteria.

Coding

React Native framework uses React.js library in order to create a true native mobile app. React Native uses native components instead of web components to create the user interface, along with JSX — a syntax that is used to embed XML with JavaScript.

This basically means that you can write mobile apps similar to how you would write web apps. Also, styling React Native components with StyleSheet is almost exactly the same as the good old CSS, the only difference being the field names written in camelCase instead of CSS dash style.

React Native uses a set of components such as <Image>, <View>, <ScrollView>, <Text>, <FlatList> which map to their native iOS and Android counterparts, as well as some platform-specific components such as <DatePickerIOS> and <ActionSheetIOS> for iOS or <ViewPagerAndroid> and <ToastAndroid> for Android.

One could say that this is much easier than native approach. But is it really?.

React Native uses Javascript for multiple platforms. This means it might be easy to maintain the code in the long run.

However, this comes at a cost. Android and iOS both have different design guidelines. Human Interface Guideline for iOS and Material Design for Android have a lot of differences. So, if the project requirement dictates OS specific requirements then separate code has to be written which defeats the purpose of a single codebase.

It should be noted though that even with the factor of being allowed to write an app that looks the same on both platforms, it is still impossible to write an app without writing any platform-specific code. Some components will just look great on iOS and bad on Android and vice versa, which raises the need for fine-tuning those specific cases.

Programming Language

React Native is based on React.js, which is written in JavaScript. This is a major advantage when it comes to the fact that JavaScript is such an extensive and popular language that it’s very hard to find a programmer who hasn’t used it at some point in their career.

What is the disadvantage of using JavaScript though? Well… it’s JavaScript.

While Java and Swift/Objective-C are strongly-typed, compiled languages, JavaScript is interpreted and often called an untyped language.

True native apps have more control of the variables and the logic of the app is more predictable, JavaScript relies on the programmer’s experience, Lint tools and automatic tests.

User Interface

Native mobile apps have considerable advantages that have access to all the native APIs such as Camera, Touch ID and GPS, as well as tools for creating animations and complex user interfaces. There is no middle layer and you are free to take advantage of everything the mobile platform has to offer. React Native does not excel at creating complex UI and animations. It is far behind the native capabilities.

React Native’s approach to structuring UI is Flexbox, which is very popular in web development and enables the developer to create a responsive web or mobile UI very easily. As such, it is a technology which rivals Android’s XML / Constraint layout approach, or iOS’s Storyboard approach.

React by default re-renders a component every time its state changes. If used well, this paradigm for building UI is superior. However, if not handled well this can be a source for wasteful re-renders. Worth noting is that, in a single-threaded JavaScript environment, performance problems might arise and you need to be extra careful while building your UI.

Also, some complex mobile features are simply best done in native. One example of this is Apple’s ARKit for creating augmented reality experiences. Another example are apps which are very platform specific, such as apps for watchOS or tvOS.

React Native simply does not provide the amount of user interface power as native mobile does, so for apps that require a highly complex UI or sophisticated animations it might not be the best choice.

Testing

There are few key factors that should be considered when designing a mobile app.

Data: The React Apps consume more data while transferring it from the server, so it becomes essential to check for the data consumption by such apps.

Memory: The device memory does differ on mobile phones and computers, so it’s important that limited resources are used.

Battery usage: The web app engages JavaScript that usually consumes battery at a higher pace than Native Apps.

Modules

While React Native can handle a large amount of cross-platform use cases, it is impossible for it to cover all the native mobile ground. This means that there will always be a need for native modules. Native modules are basically code in native language which handles a specific native feature. Examples of native modules are modules for camera, native image picker, push notifications, deep linking, and third party services like Auth0.

These modules must be linked with command, but in most of the cases this will not be enough, and the developer will need to follow specific instructions in order to link the native module so it could work on both iOS and Android.

What this means is that if React Native cannot handle it, the developers are forced to dig into native IDEs (XCode / Android Studio) in order to enable the modules.

Publishing

Publishing of Apps is also the same. If the team doesn’t have developers experienced in native iOS and Android, they may struggle to release the app. This is more of an iOS problem, with Android release workflow being more straightforward. In order to release an iOS app, React Native developers will still need to use XCode in order to configure release-related data such as provisioning profiles and certificates, which can be overwhelming.

Summary

Future

While native Android and iOS Apps are here to stay, they will remain with us for a long time in the future. It is true that React is gaining popularity but we are yet to see the best from React Native.

React is developed and maintained by Facebook. The way react native compiles XML to native code is a black box process, meaning all bug fixes and features must come from Facebook only.

Also, while React Native tends to keep up with the native trends, there will always be a time gap between some new feature (Face ID for example) emerging on the native platform and the same feature being included in React Native. This means that developing anything using a fresh technology will take more time.

Conclusion

React Native is still in development (beta). There is an active community of developers building open source plugins, but there are still many in progress. It is very powerful but it still cannot fully replace native mobile development.

If your company aims to deliver an exclusive experience to your clients choose native app development. Yes, it is expensive and takes more effort, but faultless performance and consistent user interface can be worth every cent.

--

--