In the case of React, the Virtual DOM is like a layer between the developer’s description of how things must look, and the work that is already done to render the application onto the page. To render interactive UIs in a browser, developers must make changes to the browser’s DOM. While in React Native, instead of rendering to the browser’s DOM, React Native uses native APIs to render to platform-specific components: it invokes Objective-C/Swift or Java APIs to render to iOS and Android components. This is a distinctive feature of React Native that sets it apart from other cross-platform mobile application development technologies which often end up rendering web-based views.
To understand how React Native works under the hood, you can check out this blog post by Shahen Hovhannisyan, a senior software engineer at Simply.
React native pros and cons
#pros of React Native
React Native enables using the same code base or a part of it between the iOS and Android operating systems. Practically, full cross-platform development is possible to some extent, of course, depending how many native modules you include in your script․ Though to develop an app for iOS you cannot use WindowsOS but with MacOS you will be able to write multi-platform mobile application without any issues.
Shorter Development Time
One of the strongest sides of React Native is its faster development. Its numerous ready-to-apply components accelerate the development process and due to its ability to share a big part of a code base between operating systems in short time-frame, you potentially halve the development time if you developed two separate native apps for iOS and Android.
Live and Hot Reloading
Thanks to hot reloading, a developer can keep the app running while implementing new versions and tweaking the UI. It makes changes in the app instantly visible without the need for the developer to save them. This boosts productivity and saves a lot of time. The idea behind hot reloading is to keep the app running and to inject new versions of the files that you edited at the run-time. This way, you don't lose any of your state which is especially useful if you are tweaking the UI.
One team development
React Native is solidly based on creating a mobile UI. In native development, it is necessary to create a sequence of actions in the application, whereas React Native allows to see everything in the script. As a result, it is much easier to see the path a user can take and also to detect bugs on their way.
#cons of React Native
Still Less Native Navigation
Few Custom Modules
Despite its daily improvements, React Native still lacks some components. And there are still some components that are partially developed. The chances are you won’t have a problem with that, as the majority of custom modules you need are available, well-documented and working properly.
Still requires native code
To implementing some native features and modules in React Native script requires detailed knowledge of a particular platform. React Native does offer custom modules that you can refactor across operating systems, but in case of the access to device sensors, camera or push-notifications you need also some help from iOS and Android developers. Their input depends on the complexity of your project, but you need to bargain for them when kicking off with React Native.