Why Audacia uses React Native to build user-focused mobile applications
Tags: reactnative, mobile, ios, android
Published: 2023-02-06 13:47:24

At Audacia we use the latest, industry-standard technologies for our mobile development projects. React Native is a popular framework for developing mobile applications that Audacia has used on a number of successful software development projects. 

React Native allows developers to build cross-platform applications using a single codebase, making it a cost-effective and efficient solution for businesses looking to expand their reach to both iOS and Android devices.

Drawing on our personal experiences using this software, this article will delve into the benefits and potential drawbacks of using React Native. The final half of this article will look at a case study of how Audacia has used this framework to build intuitive, user-driven systems for a leading education organisation.

## What?

React Native is a framework for building native mobile apps using JavaScript and the React.js library. [React.js](https://reactjs.org/) is the JavaScript library that powers the user interface of a React Native app, handling the rendering and updating of components. 

React Native is essentially built on top of React.js, using its core principles and concepts to create native mobile applications. Once a mobile application is built using React Native, it can be deployed and run on various mobile platforms, including iOS and Android using either an iOS simulator or Android emulator, respectively.

Introduced by Meta (then Facebook) in 2015, React has become a widely used technology for mobile application development. Some examples of the companies that have used React Native to build mobile applications include:

* Facebook: React Native was developed and open-sourced by Facebook, and it is used extensively within the company for building the Facebook and Instagram mobile apps.

* Airbnb: The Airbnb mobile app was one of the first large-scale consumer apps built using React Native, and it has continued to use the framework for its development.

* Skype: Microsoft's Skype team used React Native to build a cross-platform version of the Skype app.

* Tesla: The Tesla mobile app, which allows users to control certain aspects of their Tesla vehicle and check its status, was built using React Native.
## Benefits

React Native is a popular framework used for developing mobile applications, and for good reason. Some of the main benefits around using react for mobile application development centre around its performance, efficiency and the support resources available.

### Faster development times

One of the main benefits of using React Native for native development is that it allows for faster development times. Since the same code can be used for both iOS and Android, developers do not need to start from scratch for each platform. This also means that developers with expertise in web development, who may not be familiar with native languages and frameworks, can also build native applications using React Native.

For those looking to get started right away, React Native provides a large library of pre-built components that can be easily incorporated into an application, saving time and effort on building custom components from scratch.

Prebuilt components in React Native are essentially ready-made pieces of code that can be easily added to a project without the need for extensive coding or customisation. A developer that needs to include a list view in their project, for example, can simply use a prebuilt component rather than writing their own code to create the list view. This can save a significant amount of time and effort, and allows the developer to focus on other aspects of the project.

React Native also allows developers to visualise changes they make to code quickly and efficiently. With its "hot reloading" feature, React Native allows developers to make changes to the code of an app and see those changes reflected almost instantly in the app, without having to rebuild or redeploy the application manually. This can significantly speed up the development process, as developers can see their changes in real-time and iterate more quickly.

### Performance

Performance is a key benefit for using React Native because it allows for faster and smoother execution of code on both iOS and Android devices. Since the app is natively rendered, it provides a smooth and seamless user experience.

React Native uses a declarative programming paradigm, which makes it easier for developers to write code that is predictable and easy to debug.

As part of this paradigm, React Native uses a virtual DOM (Document Object Model) which helps to optimise the rendering of components and reduces the amount of processing required by the device. This results in a more responsive experience.

The DOM is a way of representing the structure and content of a document (such as an HTML or XML document) in a tree-like structure. It allows the developer to access and manipulate the elements of the document in a declarative way, by specifying the element or attribute they want to access, rather than the steps needed to access it.

The DOM can be used in React Native to handle events such as touch or swipe gestures, as well as to manage the layout of elements on the screen. Drawing on this model helps to ensure that the user interface is responsive and easy to use. 

React Native's declarative programming paradigm and the DOM both allow the programmer to focus on the desired outcome rather than the steps needed to achieve it. The DOM provides a declarative way to access and manipulate elements in a document, and the declarative programming paradigm allows the developer to describe the desired outcome or result of their code, rather than specifying the steps needed to achieve it.

React Native also uses asynchronous rendering, which means that the app can render updates without blocking the main UI thread. This feature, again, allows for a smooth and responsive UX and is achieved through the use of native components and the ability to directly access native APIs. All of these areas work together to significantly improve the performance of the mobile application compared to using a web-based solution. 

Should you encounter performance issues with your application, React Native provides several performance optimization tools, such as the React Developer Tools and the Chrome Performance tab. These tools allow developers to identify and fix issues in the app.

### Community

React Native has a large and active community of developers and users, which can be a huge benefit for those considering using this framework. Because it is an open-source framework, there is a large community of developers who contribute to its development and provide support to its users.

This large and active community means that there are plenty of resources available for learning and troubleshooting. The community offers a wealth of knowledge and resources, including documentation, tutorials, and forums where users can ask questions and get help.

Leveraging the resources available in the community, developers can more easily learn how to use React Native and troubleshoot any issues they encounter.

In addition to providing support and resources, the React Native community also plays a key role in driving the development and evolution of the framework. With a large number of contributors, React Native is constantly being updated and improved, ensuring that it stays up-to-date with the latest technologies and best practices. 

This can be particularly useful for those looking to build cutting-edge mobile apps that leverage the latest features and capabilities. Overall, the community surrounding React Native makes it a strong and reliable choice for anyone looking to build mobile apps.

## Drawbacks (and how to overcome them)

While React Native offers a range of benefits, it also comes with some drawbacks. There are, nonetheless, ways that developers can overcome some of the potential drawbacks with using React Native.

### Limited access to native APIs

For one, React Native does not provide access to all native APIs, which means that developers may need to build certain features from scratch or use third-party libraries. However, there are many libraries and tools that have been built specifically for React Native, which can save time for this process.

It is advised that developers should use native code where necessary. Developers can use native code to access native APIs and ensure that critical features are implemented efficiently.

### Larger App Size

React Native applications also tend to be larger in size compared to native applications, which can raise challenges for users with limited storage space on their devices. Developers may use code-splitting and lazy loading to address this issue. These actions, while not reducing application size, can speed up startup time. This is because all of the code does not need to be loaded into memory when the app starts.

Using native components can also help reduce the overall size of a React Native application because they do not need to be bundled with the JavaScript code. Native code is compiled directly into the application's executable file and, therefore, does not need to be shipped to the device separately. As a result, the size of the JavaScript code and the associated resources can be significantly reduced.

Furthermore, native components can often provide more efficient and optimised solutions to common tasks, such as rendering complex UI elements or handling data storage. These areas, too, contribute to reducing the overall size of the app, as less code is needed to achieve the same functionality.

### Performance Issues

React Native apps can sometimes have performance issues on certain platforms, particularly older versions of Android. To best tackle this issue, it is advised you optimise React Native applications. This can be done by profiling the app's performance, identifying bottlenecks, and implementing improvements as required. An experienced software development partner will best be able to assist in this process and ensure that your React Native applications are performant.

Automated testing, additionally, can help developers catch these issues early in the development process. Problems can then be fixed before the app is released.

At Audacia, we take an automation first approach to all software development projects, using tools like Cypress to increase the speed of delivery and improve feedback cycles. Our software testing services consist of a hybrid API and UI automation approach with tests running regularly to catch any regression bugs.

## Case Study: Modernising a legacy application to track the progress of 1000+ pupils

[Juniper Education](https://audacia.co.uk/projects/juniper-education) provides educational institutions with the tools they need to overcome challenges, including professional services, software and training, in order to achieve the best results for their students. 

Juniper had undergone significant growth, which included acquiring other educational support applications. With this growth, came the requirement to provide applications that would allow in excess of 1000 teachers and parents to monitor pupil activity. 

The performance of these two existing legacy applications was not satisfactory, creating a negative effect on the overall user experience. Users were often unable to login and crashes were common. 

Audacia used React Native to create two differently branded versions of the company’s core applications.

React Native was chosen for speed of development, since this technology allows developers to write features that target both the Android and iOS platforms. This flexibility meant that it was straightforward to create two performant apps while keeping the theme consistent across both. 

This technology, additionally, offered some useful CLI (Command Line Interface) commands for creating the separate builds. For example, "react-native run-ios" or "react-native run-android" allows you to build and run your app on an iOS or Android device, respectively. The "react-native start" command, similarly, starts the development server that enables you to run your app in development mode.

Audacia adhered to all official Google and Apple application development standards throughout the project, as well as completing additional details to ensure Apple screened the application for age sensitive content before deploying it to the app store.

One of the main benefits of React Native in this instance was that it allowed developers to create cross-platform applications, meaning that the same codebase could be used for both Android and iOS. This saved a lot of time and effort for our developers, as we were not tasked with having to maintain two separate codebases. Additionally, the declarative programming style used by React Native made it easier for developers to understand and maintain the code.

Juniper's core applications have been improved to align more closely with modern development standards, while performance and security around the app have been improved significantly. 

Juniper saw a significant improvement in the overall performance of their application, as well as making use of new security functions. The applications also support Juniper's national client base across key mobile operating systems and devices. 

## Conclusion

Overall, React Native offers a range of benefits for developers looking to build mobile apps. While it may not be the most appropriate choice for every software development project, it can be a useful tool for developers looking to build cross-platform apps quickly and efficiently.

Its ease of use, performance, and active community make it a popular choice for many companies and organisations are a few reasons why Audacia continues to use React Native in our mobile application development projects.

[Audacia](https://audacia.co.uk/) is a leading software development company with experience delivering bespoke internal and external mobile solutions for enterprises. Our mobile applications are focused around security, performance and accessibility. We continue to use React Native, among other industry-standard technologies such as Xamarin, .NET MAUI and Ionic, to deliver intuitive, user-focused mobile applications.

This article was written by Audacia's Content Coordinator, Jack Gill. View more technical insights from our teams of consultants, business analysts, developers and testers on our [technology insights blog](https://audacia.co.uk/technical-blog).

**To find out about solutions that we offer, speak with us today on 0113 543 1300, or email at info@audacia.co.uk.**