Nominated technologies I know are:
Add to the list Flutter which is not yet production ready as far as I know, but good enough now from what I've heard. Then also, Kotlin is aiming to offer iOS options with Kotlin Native and then Kotlin already supports Android natively.
So depending when you're planning to build it, there are two more options.
I've tried Cordova, Phonegap, Ionic and for simple apps, they work fine, for more complex apps, the user experience is not that great. React-native has horrible documentation last time I checked and native is a can of worms on its own.
Also ask yourself, does it have to be pixel-perfect since this will make your life even harder.
None of them are great, phonegap / cordova / ionic can probably do those things for you, but you'll be limited to what their plugins offer and the experience is often laggy unless you do plenty of work and add some third-party plugins to get around the lag. Native gives you more control, but then your code-base will probably be fragmented into a code-base per platform.
It depends on what you want to build. If you are accessing the common features across platforms (iOS and Android), then you may likely find support on cross platform solutions like React Native, Ionic etc.
I always prefer maintaining two separate stacks unless it's an easier app to build.
React Native is being adopted at rapid pace and the community is also vibrant. There are still some rough edges if your application needs to access exclusive features of a platform or something not very common (for e.g. many third-party services doesn't offer a cross platform SDK like ReactNative, they usually have the ones for iOS and Android). This imposes restrictions in using React native and you may end up writing platform specific code separately. Good thing with React is that, you can partially use React within in your existing project. You are in control.
Decide what to do next, then look support under each platform/framework to build things you want.
Mario Giambanco
Director of User Experience Development
Your question presents the answer. Each way to do it has it's own cons.
Which one are you willing to tolerate the most?
There is no best way; never has, never will be. There is the right option for the job at hand. If you can get away with a web app and scale back on features; do that if you want. If you want the best possible experience and have the time to develop 2 separate apps - native is the way to go
It's up to you as a developer (or the project manager) to decide this.