React Native is excellent for web teams that are creating a new mobile app. If your team has more experience with React than native iOS/Android, then it's a no-brainer.
However, in my experience you get diminishing returns once your app has passed v1 and your customers expect more after the new-ness wears off. You find yourself spending more and more engineering effort to make your RN app to feel as good as existing mature native-first apps, which is especially frustrating as you are solving problems that native-first app developers never had to solve in the first place. They got the solutions for free with the native sdks.
This plateau of developer effectiveness is hard to get away from as your app becomes so coupled to RN and your team invests so much into RN tooling and skills that it feels like a sunk cost.
Blog author here. As a native app developer, I would say that the trade off is similar to developing an app on native Android vs. native iOS.
You inevitably must solve problems on Android that iOS has not yet solved (or are trivially easy to do) and vice versa, but each framework also has its own strengths that come with it.
React Native is no different in this regard. We sometimes solve different problems that occasionally area easier to do on Native (although as mentioned by this post, this is the first time in years we've actually had to sit down and focus on performance).
That being said, some of the pros are that we save a tremendous amount of time through code sharing, web team contributions, etc.
I use react native svg with low level d3.js utils to produce data visualizations with a utility class that holds all the animation values across components and screens which is sort of a hack but very clean for animating several pseudo svg components.
For me it isn't about look and feel so much as being able to quickly manage massive amounts of data for interaction and data viz. I use the ramda lenses, sagas, redux, and selector stack to manage state of the data. It is clean and quick to develop. Everything is memoized with selectors only changing if the reference to the object it is using on the state tree changes.
Nobody can work data the way I can with React. It makes sense.
As a full-time native app developer on both platforms for 10 years, I find this argument odd.
It’s trivial to interface existing native code with react-native. I’ve “merged” two existing apps written on both platforms into react-native apps by adding only a small amount of JS (and some native RN interfacing) with removing zero native code on either platform. Likewise, I’ve started with full Javascript apps and slowly replaced the JS with native code where perf mattered or RN was lacking.
You can choose how much “react-ness” is in your app quite easily, and to me this is the real game changer for react-native.
the official docs worked for me.[0]
Biggest “gotcha” in my experience is version mis-match hell. Each major RN version supports a very precise version of Xcode and Android build tools/targets etc. Read the RN version release notes and you’ll be okay.
However, in my experience you get diminishing returns once your app has passed v1 and your customers expect more after the new-ness wears off. You find yourself spending more and more engineering effort to make your RN app to feel as good as existing mature native-first apps, which is especially frustrating as you are solving problems that native-first app developers never had to solve in the first place. They got the solutions for free with the native sdks.
This plateau of developer effectiveness is hard to get away from as your app becomes so coupled to RN and your team invests so much into RN tooling and skills that it feels like a sunk cost.
I do not envy the Discord apps team.