It’s the same as Cordova, Phone Gap, … and we failed with those

This is the most common misinterpretations of React Native I have heard so far. I have personally never developed anything with those technologies, but I have heard quite a lot of swearing from people doing so. The most common problems were that the apps don’t feel “right” on any platform and that they lack performance. The problem for both lies in the architecture: They use a Web View to render the Javascript application and expose native APIs through Plugins to the Web View. There are two major problems with this approach:

The web view doesn’t get as much power as a regular safari view, which leads to bad performance

The web view is the same on each platform. That way you don’t need to change any application code for a new platform, but everything looks quite identical to each device.

React solves this problem differently; React uses a bridge which directly executes (Objective-C / Java) code on a separate thread. The way this works is that React computes the difference between the old UI state and the new UI state and sends this diff to the native thread. The native thread then executes native code to render the new UI state. This way no web view is needed and everything that is rendered is the same as a regular native application would do.

This approach is much more efficient and has another benefit: Because every fundamental React component is mapped (and taken from) a native counterpart the UI always looks completely platform specific and feels a lot more like a normal native application. Of course, you may tailor it, so that every platform looks completely the same if that is what you want.

Another thing React, in general, is great at is the developer experience; You get verbose warnings and errors, which help in most cases to debug the issue quickly.