React Native has been around for more than half a decade now, and we have a lot of users commending it for all its benefits. Cross-platform development, use of Third-party libraries, faster app development, reduced complexity, etc.
Every framework comes with its own set of limitations, and React Native is no exception. There are a few glitches that React Native is riddled with, which has put off even the most seasoned of developers.
The major drawbacks of React Native were thrown into the limelight when Airbnb famously switched from React Native, sunsetting the technology to focus its efforts on building the Native app.
Companies like Udacity soon followed suit and moved out of React Native, citing performance and maintenance issues.
So is React Native the best choice for you to build your app? In this article, we look at some of the drawbacks of the React Native framework and why it is probably not the best solution for you to build your app.
Imagine you are building a chat app. The app requires a high level of customization, and there are a lot of processes running in the background at any given point of time. If you ask any developer which framework they would prefer to build this app, the chances are slim that they would answer React Native.
Native iOS offers far better solutions for creating complex animations when compared to React Native. Also, if you have to use Camera, Touch ID, GPS, etc. for your app, React Native does not offer support for these. You have to use the native framework to access these features.
Developers may face issues while dealing with screens using complex gestures since there is a sea of difference between Android and iOS touch subsystems to be combined in a unified API.
When you set out to build utilities such as battery monitors, media players, antivirus, etc. it is much easier to use native app development compared to React Native. This is because these applications always use native features and APIs provided by iOS.
One could argue that we could use native wrappers for APIs and components to build these utilities, but this takes up a lot more time and effort on the part of the developers, compared to using native components.
Ever heard of Nova Launcher, an Android app that lets you customize your home screen, icons, and dock widgets? Or Luci, an app that helps you track your dreams? If you are a loyal iOS user, tough luck because these are some of the most popular Android-only apps.
But that doesn't mean iOS users are not a part of the "exclusive app" club. Apps such as Timepage, for instance, is an iOS-only app that is designed beautifully and enables you to see your schedule for the day easily, even going as far as predicting weather on a particular day using historical data.
With both Android and iOS having a plethora of apps that are built exclusively for the respective OS, a React Native app will always feel inferior to these apps, simply because it cannot handle the complexity of a native app. The performance of your app depends on a lot of factors, but time and time again, it has been shown that native apps out-perform apps built on React Native.
We have seen previously that React Native is great to build small, simple apps that don't require a lot of user interactions. But what happens when you need to build an app that utilizes heavy computational power from your smartphone, say, a stock trading app.
Considering the fact that according to a Tech Beacon survey, a whopping 61% of users expected an app to load in under 4 seconds, and 80% of respondents indicating that they will only use a problematic app a maximum of 3 times, performance of the app becomes a key issue. You cannot afford to publish an app to the Play Store or App store that has long loading times unless you want to cause some serious damage to your company's reputation.
When you build a cross-platform app using React Native, you expect the app to behave the same way in Android as well as iOS. While this may be true in most cases, there are a few worrisome exceptions.
Take Reflectly, for example. An intelligent journal, the app uses AI to help users keep track of their thoughts and maintain a diary of activities. The app was initially developed in React Native, and the team published it for iOS on the App store.
When the team then decided to release Reflectly for Android, it was looked upon as a routine task that required minimum effort, since React Native is supposed to be "cross-platform." Instead, the team faced failed overflows, missing scroll elements and shadows cut off.
The team then spent an agonizing six months building the iOS app first and fixing it for Android. The app soared in popularity, and eventually, the team behind Reflectly decided to port to Flutter.
This is just one of the horror stories of elements behaving differently in iOS and Android, and an important aspect to keep in mind while developing your app.
For the uninitiated, an abstraction layer, also known as "the bridge," allows React Native to activate the actual rendering APIs on Android and iOS. This abstraction layer is built on top of the native platform to create more functionality.
So how does this abstraction layer affect your React Native app? For starters, finding bugs in the abstraction layer is a real pain, as countless developers will testify.
A bug in the abstraction layer means an unexpected bug in your application. These bugs are extremely difficult to diagnose, in addition to being difficult to pinpoint.
If this wasn't a big enough hurdle, the abstraction layer adds another hurdle to the app development process- third party libraries. Using an abstraction layer means being dependent on these third-party libraries to ensure your framework is up-to-date and does not break easily.
If your app uses custom designs, you will have to implement them in native languages such as Objective C or Java. This beats the very purpose of pf building a hybrid app, and developers are left frustrated for all the additional code.
All in all, if your app is developed using React Native and depends on an abstraction layer, it is high time to reconsider going in that direction.
There are specific use cases where downloading third party resources becomes the only way for you to build your app. This is one of the reasons why you must reconsider using React Native while building your app.
Take, for instance, the use of Tab bar. While it is easy to build a Tab Bar in iOS, it isn't easy to implement this in Android. To add things like this, you often have to download third-party resources and libraries. This increases the dependency of your app on an aspect that you can't control.
Add to this the fact that React Native updates happen very frequently, and the chances that your third party libraries or resources that you have used in your app get outdated. According to Facebook, updates to React Native now are scheduled once a month.
If you are building an app that heavily relies on third-party resources, then think twice before choosing React Native.
If you are an established app developer and are looking to pick up React Native to help boost your go-to-market speed, you might want to reconsider due to debugging issues. This is because a new developer who is just learning the ropes of React Native cannot utilize all the features of the chrome debugger to edit each element's property.
React Native does come with an in-built code inspector, but it is not the most versatile solution around.
There are also implementation issues that work against React Native as a framework. For example, consider building a feature such as long lists. These could be anything ranging from tweets on twitter, Facebook posts, etc. These are all in-app lists. When more and more users start using your app, and these lists become long, it is really difficult to implement it from a development point of view.
React Native does provide a Flatlist Library to deal with this issue, but it can't be compared with Android's RecyclerView or iOS's UICollectionView.
Before delving into React Native to build your app, be aware of these architectural issues.
React Native has a large community online to answer all your queries when developing an app. Still, many feel this community is mostly web focussed and consists of people in the web industry.
In other words, there is a comparatively fewer number of native developers who will support you while you are building a React Native app.
So those are our top 10 concerns that you should keep in mind before choosing React Native for Web development. Did we miss anything? Write to us in the comments section below, and we will give you a special shout out.