We recently shipped a music making app which uses React Native for the UI, which is visually fairly rich and non-standard, including real-time rendering of shaders at 60fps responding to user input using gl-react-native and regl, and overall have been very pleased with the speed at which React Native allows you to iterate and the polish/smoothness of the resulting app; not to mention the fact that it allows us to easily make use of web developers’ existing CSS skills (as compared to writing a native app).
The fairly straightforward bridging between React Native and native code has allowed us to have an audio engine running in C++ and to communicate with it in both directions in real-time without significant overhead.
That’s not to say it’s been 100% straightforward, there were definitely a few rough patches along the way, but overall I would definitely use it again. I can easily believe that e.g. 18 months ago it may have been a much rougher experience which may explain your thoughts though!
> communicate with it in both directions in real-time without significant overhead
Doesn't all the communication have to be done by passing JSON-encoded messages between threads? So compared to calling a function on the same thread, there is very significant overhead, especially if you want to pass large data structures (which would have to be serialized) or if the calling thread needs to block waiting for the answer.
But as long as you stick to send small and asynchronous messages, it doesn't have a significant impact on the user experience, I suppose.
Yep - C++ is generally used for audio programming because you can write code that is real time safe for use on the audio thread (low latencies mean you might have 5ms to fill a buffer with fairly intense calculations required for a modern synth, so any waiting for locks, memory allocation, GC pauses etc. can be disastrous and lead to audible glitches). On top of that there’s a huge amount of code and libraries for audio stuff written in C++ - we used JUCE which provides a lot of helpful abstractions and cross platform compatibility.
Exact opposite experience. After being a mobile dev for 8+ years and making all of my most recent apps in RN, including a rewrite of one that was many years old, you're wasting your time if you still write native code instead of RN. It's just better in every single way and is an incredibly impressive, stable piece of technology.
I got just a taste of RN recently. The thing that stood out the most about it to me is being able to iterate through debug cycles at a much higher speed compared to native debugging.
You probably have an advantage coming from a native background. The main thing i've been battling when it comes to React Native is that to do things really well, you do need to be able to dive into native code from time-to-time. It's definitely true that you can write simple apps with just the React layer, but I think people greatly underestimate the amount of work it takes to build an app that actually feels native.
Can you make a native button in React Native yet? When I first tried it, there was no button component at all; later, they added a component[1] that emulates (almost correctly) the look and feel of a native button but is not actually native.
I tried to implement a native Android button component myself (i.e. hook it up[2] using Java code), but the problem I ran into was that for the button to compute its desired size, React Native wants to do the measurement step on the JS thread, before the actual button is created (so it can't be asked for its size). And the built-in components' implementation of measurement looked really complicated, so I gave up on it.
I had the experience of taking React Native to production in an Enterprise-level environment once.
My team first experimenting with RN on 0.8.0. What I found impressive was that some of the experimental code we wrote in RN proved stable enough, that it was still the same on production level builds using RN version 15.x eighteen-months later.
I'm not saying RN is THE solution, but I for one would stand to vouch for it for both top-quality UI output but also for ease of development.
That being said, there's so much cross-platform work going on, who knows where the industry will be years 2 years from now.
We recently shipped a music making app which uses React Native for the UI, which is visually fairly rich and non-standard, including real-time rendering of shaders at 60fps responding to user input using gl-react-native and regl, and overall have been very pleased with the speed at which React Native allows you to iterate and the polish/smoothness of the resulting app; not to mention the fact that it allows us to easily make use of web developers’ existing CSS skills (as compared to writing a native app).
The fairly straightforward bridging between React Native and native code has allowed us to have an audio engine running in C++ and to communicate with it in both directions in real-time without significant overhead.
That’s not to say it’s been 100% straightforward, there were definitely a few rough patches along the way, but overall I would definitely use it again. I can easily believe that e.g. 18 months ago it may have been a much rougher experience which may explain your thoughts though!