26 votes at time of posting and not a single comment?
There are many more 3rd party development tools that can cross compile to iOS and Android - React Native isn't the only one.
http://phonegap.com/ has been around for a long time
http://www.appcelerator.com/ Titanium has been around for a long time as well.
Nothing is wrong with a 3rd party language - but nothing has the level of access to core os features and systems as a native language provide.
iOS and Android are still being developed at a break-neck pace - when new versions of the OSs come out, these features do not immediately trickle down to 3rd party tools. It may take weeks, it may take months for features to make their way in.
iOS and Android have no incentive to support these 3rd party tools; if either decide to change a feature; drop a feature that's been in place for years; it may break your app. Nor do they have any incentive to tell the 3rd party tool developer that they did so.
Native apps tend to be faster, as they don't need to be interpreted first.
There tends to be a quality difference also between Native and 3rd party. iOS and Android have pretty different UI styles and for a long time, very different button layouts (the 4 buttons at the bottom of the screen on older Android devices). It can sometimes be difficult to get a native feel with 3rd party tools.
A big con with Native apps - you need to develop the same app twice, obviously. Java doesn't run natively on iOS and OBJ-C / Swift don't run natively on Android (though recently, this looks like it might be changing)
Again - there is no best of anything. It's whats best for the app in question. If your a small, 1 man or women team developing something for yourself and you want to see how far you can take it - sure - use a 3rd party dev tool and write for both.
If you need more power; if you need access to accelerometers, cameras, microphones, phone specific features; you may want to write native.