React is a library of Javascript components that create and manage UI components governing how elements look, feel, and behave on-screen. In most cases, these components are used in web applications.
React Native, on the other hand, is a framework that leverages React’s component model to build user interfaces that translate to mobile native code instead of HTML elements.
Both of these technologies, developed by Facebook, are modern development tools that come with benefits and caveats to consider when determining your tech stack strategy. In this post, we’ll focus on the benefits and considerations of React Native.
If you are considering to use React Native, make sure you can justify it from a business perspective. Bottom line, everything boils down to two main benefits.
The main benefit of React Native as a framework is that developers with proficiency in HTML and CSS can leverage that existing expertise to write native code. Understanding of these basic web development languages makes transitioning or onboarding to a React Native environment relatively straightforward. This benefit will have an impact on your hiring, staffing, and outsourcing costs, as qualified developers or third-party agencies can use the existing workforce to begin making an impact on your mobile application right away.
If your engineers are already proficient with web technologies and especially React, they could have an easier path for developing a mobile application by learning React Native than by learning native iOS and Android.
As you’ll find with most benefits, they don’t come without downsides or other relevant considerations. This one is pretty clear; if your engineers don't have any mobile experience, they will have to handle a significant learning curve. Auditing your team’s abilities should be a priority before adopting any solution, and the same is true when considering React Native. If your existing talent falls short, consider bringing on someone experienced for a short period of time to help them onboard.
React Native provides two potential benefits here: sharing code across web apps and mobile apps, and across mobile platforms (iOS and Android).
In practice code reusability means that you will be able to share some of the business logic like state management or server communication. You could also reuse some UI components across mobile platforms, but you will still have to make adjustments for each platform, depending on how "native" you want your app to look and feel.
When it comes to sharing UI components across web and mobile apps, there are solutions that allow it, but you must consider this option carefully since it may bring more complexity and unnecessary code to your codebase.
As mentioned earlier, with React Native you can save money by reusing experience or some parts of the codebase. But it’s important to keep in mind a few important key points:
You will never reach 100% code reusability. Most apps won’t even get to sharing 80% of the codebase.
The mobile development process is completely different from the web development. There are definitely some things that native developers would envy like live reloading, but for someone who has never come close to mobile development, the learning curve will be steeper: app store publication process, different terminology, different debugging and testing techniques, certificates and provisions, memory management, approaches to routing and navigation, and more.
React Native is not a silver bullet. Complicated projects still require writing native bridges which in turn require people who can write Objective-C or Java (or Swift and Kotlin). The more complicated your app is, the more native intervention you will need and the more rough edges you will hit with React Native.
Take everything you watch or read on the internet with a grain of salt. There are many ways to use React Native, from single views within big applications (brownfield projects) to apps fully built with React Native from the ground up (greenfield projects). Every company has different requirements, priorities, and engineers. If possible, try to talk directly with people who used React Native and understand their specific challenges before making a decision.