Companies often eschew building native apps, thinking hybrid solutions will be easier and more cost effective to build. They end up shoving a not-so-responsive web app into some kind of native web frame, which ultimately leads to terrible user experience. Many companies opt to have two separate native teams for iOS and Android instead, but that strategy can be expensive and often comes with its own challenges. React Native, on the other hand, lets you build performant native apps using the same technologies your web team is already using. I’ve been a native app developer for many years and this is why I think React Native has become the best choice for native app development.
Modern, developer-friendly tooling
The React Native CLI lets you start a new native app project that will work on both iOS and Android. These tools are great since they let you start building your app right away, rather than spending a lot of time working on setup and configuration before getting started. The tools are similar to Xcode or Android Studio project templates, so if you’re familiar with those, it’s easy to get started. One of my favorite features of React Native app development is live reload. The tooling for both web and native apps supports live reloading of changes, which makes testing changes faster and eliminates the need to recompile and redeploy onto a device. Another advantage of live reload is that your application state is maintained. This is great for testing changes to complex flows without having to recreate the steps each time. Tools like CodePush make it easy to push updates to your React Native app without having to go through the iTunes Connect or Google Play submission processes.
Build native apps quicker with code sharing
I have worked on several projects where there have been three client apps—web, iOS native, and Android native. More often than not, the development of each app diverges and some become more complete than others. With a React-based platform, your web and native apps can share more code used for state management, API requests, and GraphQL queries or mutations. This can help reduce inconsistencies and bugs across the board since logic doesn’t need to be duplicated across three separate applications. For example, all of your state and request logic could be built as a separate package that both the web and React Native apps consume. React Native also lets you unify your development team since the same set of technologies is used on all platforms. Since React works the same way on web as it does on native, any developer familiar with React and JavaScript can create UI components for any platform. Your React Components render to native UI elements specific to each platform, creating apps that are more performant than web-based ones.
The JavaScript ecosystem
It’s really easy to add third-party modules to your native app in React Native – just yarn add whatever. With React Native your app has access to the entire JavaScript ecosystem of modules. Unlike native 3rd party frameworks, there are no additional package managers required, no compiler flags to add, and no worry about target SDK compatibility.
Considerations
As with every technology, there are tradeoffs to the ease of building native apps with React Native. On mobile devices, JavaScript runs on a single thread, meaning calculation-intense operations might be a better fit for a native module where multiple threads can be leveraged. To write performant native modules, you will need to understand Objective-C as well as Java, and have a good understanding of how platform APIs operate. That said, React Native is constantly being updated and has under-the-hood performance improvements rolling out regularly, so this issue may lessen over time.
Final Thoughts
React is already a fantastic way to build UIs for the web and components are a great way to conceptualize your UI as a function of some data. React Native builds upon React's philosophy of "Learn once, write anywhere," making it easy for React web developers to build native apps. Composable unified UI codebases, instant app updates, and better development tooling make React Native the better way to make native apps. If you have any questions about React Native or mobile development in general, find me on Twitter at @carlos_paelinck.
And if you want to check out a great example of a React Native app for data visualization, Victory UI Explorer by Angela Nicholas is one of my favorite Formidable projects.