Is React Native Worth It?

Sheil Gandhi
4 min readDec 6, 2021
Photo by Ferenc Almasi on Unsplash

React Native is a framework based on React, a JavaScript Library. React Native is developed and supported by Facebook is heavily driven by the community. React Native brings frontend framework technology and combines Native code to provide a hybrid application. React Native comes with a selection of command-line interfaces. The choice is important when starting with React Native. The Expo Command Line (Expo CLI) handles all the configuration changes, conflicts, and certificates. The React Native Command Line (RN CLI) is more manual and less beginner-friendly.

React Native takes the advantage of web programming by bringing the technology to the Native Platforms, i.e., Android and iOS. The benefit of bringing web programming to Native devices is that you can code once and deploy it anywhere. That is the slogan of React Native, “Code once, Deploy anywhere”. An advantage of only coding once, i.e., instead of multiple platforms, is that it saves time and money. A recent calculation showed a 90% overlap in Android and iOS code. Therefore, time and money are saved by not having to rewrite code for separate platforms.

An advantage whilst coding is the live reload feature. The live reload allows developers to see the changes they make to the code. A good example of this is when changing the CSS or StyleSheet component. I found this ‘hot reloading’ feature to be particularly helpful when developing my Camera Screen. I could see how each style could affect the layout and style of the screen. For example, I had many flex: 1 View’s. By removing and adding this flexbox property, I saw how the footer of the camera was repositioning itself. Interestingly enough, hot-reloading is not a feature in native frameworks.

Another advantage of React Native is its strong performance in mobile environments. In native application development, the applications are more CPU intensive. Whereas in React Native, the framework the GPU gets more utilised. In my app development process, I cannot attest to the fact that the GPU was more utilised. However, an advantage I did encounter was the fast performance of the framework.

The modular and intuitive architecture of React is translated into React Native, which benefits developers. If I were to be working in a group for this assignment, the component-based nature of React would have helped make development more flexible. In a team, different team members could be assigned different components to create and update, without having a lot of impact on another teammates code.

The disadvantages of React Native impacted my development process a lot. One disadvantage is the debugging issues. In my experience, the logs provided by React Native, and Expo were very unclear at times. Although it easily identified incorrect variable names, when there was a more complex error, the compiler would fail to highlight the location of the issue. The logs would have generic catch statements from code that was ‘under-the-hood’ of the framework. When researching these issues online, a lot of community feedback was identical to my experience. However, issues were generally isolated to the component that was being developed.

When developing in React Native, native development knowledge is still required. One feature which React Native lacks is push notifications. This, in turn, would mean that a Native developer would be required to go into the Native code and add that functionality. As a result, the time, resources, and money would increase. The development team would need to be increased to develop on the React Native codebase.

There are several disadvantages when using the Expo CLI. Using Expo, Configuration for older versions of iOS/Android cannot be done; There is an increase in executable size, Firebase push notifications and Crashlytics are not supported. Testing is not fully supported with certain features like Firebase Authentication, image caching, native modules are not supported, and deployed apps may have different behaviours compared to the development version. Instead, a build is required to test them. The issue I had with Authentication was that I had interacted with the Firebase Console to check if a user was created when developing. If the user was not authenticated, then nothing would appear on the Firebase Console. Otherwise, a new user field would get added to the table. A fortunate aspect of my app is that it is an MVP scale project. Scaling the app would introduce these problems to the development process.

To the React Native Developers, I have several suggestions for the current framework. Firstly, React Native prides itself as a user-friendly development tool and it is very much. However, I would recommend providing better error logs for developers. The more specific the location of the error, even providing a line number where the application failed would improve the current situation. Learning React Native is a challenge to all programmers, so providing more useful error messages is a must moving forward. Add more features to the current component library. I would have liked to have push notifications pop up for users when a new message gets posted. However, I would need Native knowledge and experience to add that currently. This would take away from the current, overall positive, experience of React Native. Therefore, adding more functionality like push notifications would improve the current standing of the hybrid framework. The things other developers from bigger scale companies would be better testing. Understandably, testing isn’t very easy with React and developing testing for React Native would be even more of a challenge. However, if the framework wants to become more widely adopted by all companies, then testing must take priority. All in all, the framework is very user-friendly and delivered for my project.

--

--