The traditional choice for the development of a mobile application is certainly to use the native SDKs offered by the operating system as avoiding intermediate levels is certainly able to have a benefit in terms of performance. However, today the need to develop cross-platform apps and therefore have the same version of the app on multiple systems, especially Android and iOS, is very common. The native approach in this case obliges to have structurally different apps that should be as similar as possible in terms of UI appearance and functionality offered. Maintenance is therefore very expensive and, if it is a problem, this is the case in which a hybrid approach may be preferred as it allows to develop a single application also benefiting from some native functionalities with specific characteristics of the Web. An example of an app hybrid could be a native component (Web View) to display one or more web pages embedded in the app itself or available online.

The rich and interactive experiences we have come to expect on mobile apps have created new standards and expectations for all digital media including the web. The result is websites are evolving to become more app-like in their rich functionality. - Quoted by Raj Aggarwal, CEO of Localytics

In some cases, during my professional experiences, I had to choose a framework that would allow me to develop a cross-platforms solution with a single codebase. Not particularly enthusiastic about Apache Cordova for the fact that the graphical interface is based on a Web View which notoriously requires a lot of resources, I have dealt with React Native and Ionic. Both React Native and Ionic can use ReactJS which adopts a new approach to web development as it is based on the concept of Component and on its life cycle with also the concepts of state and properties. An approach that I much prefer as it fits perfectly with the Atomic Design pattern, with more complex components that include other simpler ones. Furthermore, React Native does not use WebView and, unlike the classic WebApps, it has a mapping of each of its components with a native counterpart.

Where possible my preference goes towards the native approach. The main reason is that in any case a hybrid app necessarily requires an abstraction so the logic of the app must always be interpreted and this is not positive from the performance point of view, even if with the recent frameworks the performances have definitely improved. The use of a hybrid framework also does not guarantee total control and could lead to problems when new operating system updates come out. However if I had to choose a hybrid framework I would go with React Native as it relies on native components with the logic written in Javascript (or Typescript), thus leading to an improvement in the development cycle also because with each modification of the code it is not necessary to redo the build of the app and also for its component structure possibly organized according to the Atomic Design pattern it is much easier to have coverage of unit tests and improve the quality.