At the beginning of my developer career, I developed some Android apps in Java while having no clue about Java or OOP. I somehow managed to put things together but the code was horrible.
Some years later, we had to work on a React Native app at work and it was a mess. The project only worked for two of us 3 developers at the same time. One person always had some issues. The whole ecosystem seemed broken with outdated packages and things that just don’t work as one might expect.
Last year I had to continue the development of an Cordova based app. Cordova didn’t get in the way too much and the app logic was written in VueJS. It was a decent experience but the “deployment” wasn’t that easy. We managed to get an Android APK generated, even though the Play Store complained about missing optimizations, etc. We never figured out how to properly generate the IOS version.
I am a big defender of native mobile apps. They just feel better and also look like proper apps on each system. This javascript “build once, publish for all platforms” concept is just a marketing phrase. But depending on the type of app one wants to build or the “quality” one wants to achieve, one might see that differently.