This is a slightly cleaned-up version of the venting I did while pulling my hair out over react-native issues. The state of using react-native might be getting better with the community restructuring and core-rewrite. So take these dated notes with a grain of salt.
After months of struggling to port libraries and develop applications using react-native, I have to recommend trading the comfort and breadth of the react and javascript ecosystems for Flutter and dart if you're developing a mobile app.
react-native is buggy and slow (or at least very hard to make fast). Perhaps it can be blamed on the size of the community, but the project is managed in an almost adversarial style. Almost all issues are ignored until the bot closes them for being "stale". They get locked too, just to make sure the community can't communicate workarounds effectively.
- The inspector doesn't work
- Even after monkey patching, attempting to inspect some components will just crash expo
- the inspector breaks the app seemingly randomly (possibly related to expo)
- Modals are broken in dev mode
- TextInput are broken
- An aside I never resolved, refocusing from one input to another seems to cause issues
- Rotated TouchableOpacity crashes on Android when selected (looks like)
- TextInput blur was broken on android from 2016 until at least May 24, 2018. I remember running into it myself, so I'm not sure I believe it was actually resolved
- overflow on android: this was actually fixed, eventually. My notes from before the fix:
Overflow: visible doesn't work on Android. The original issue for the bug was opened on Apr 4, 2016. The thread contains a reference to the a web archive link acknowledging the issue as a wontfix. Despite this, the docs have never been updated, and the "feature request" languishes away in their eternal icebox. No react-native team member even bothered to comment on the issue before @facebook closed it.
- Absolute view clipping was probably fixed by this.
- don't render a lot while navigating
- significant attempts to contribute are largely ignored - a few contributors commented, but what looks to me like an attempt to dig into and improve the bridge (the most important performance bottleneck in RN) was left hanging without direction and almost garbage collected.
- Expo is by-and-large an incredible project that makes RN DX better, but in my experience it still crashed randomly.
- (I don't know if this was in reference to RN or expo): The app crashes regularly, seemingly at random. Sometimes this crash is just a white screen. There are frequent unintelligble errors that crop up that are only resolved by restarting the app
To extrapolate/contextualize my experience:
After having built one nativebase / react-native(-web) app, I decided to try something more ambitious. My execution strategy was to prototype my new application with react web, and then ported whatever we were depending on that wasn't react-native compatible to RN.
However, once we actually got the point where we were developing with react-native on-device, everything was unacceptably slow. My co-developer started building small test samples for performance. This is absolutely what I should have done initially, don't take any software's robustness on faith, no matter how many github stars they have. With much struggling we were able to get one of these tests to render near-acceptably fast by providing random keys every render.
Meanwhile, my profoundly insightful co-developer was prototyping the UI in Flutter. We have never had any performance problems with Flutter, DX is amazing, and the development team is way more involved and responsive to the community.