The last time I used React Native, I didn't have a great experience maintaining the app. But it was 3 years back. Could you please provide your opinion if you have recently worked on developing or maintaining a React Native project. Suggest other alternatives if you had better experience.
Its day and night difference compared to 3 years ago (internally), but situation with libraries is still pretty much same: they die off randomly and you have to search a new solution, spending your time. Expo's stuff is mostly good and well maintained, thats something.
I use it, mostly with expo. Everything works out of the box and performance is actually surprising (because of Hermes engine), I'd say its a lot better than all other alternatives when it comes to cross platform development solution, simply because flutter is the only real competitor and flutter has few problems that makes it unbearable for me:
1) lots of copy-paste boilerplate code
2) ios apps behave weirdly in flutter (maybe they still havent fixed 1 frame lag with touch/swipe/scroll events? idk)
3) they're not using native components but implementing them on canvas. This sounds extremely prone to issues and bugs and requires them to catch up to update stuff once platform holders change something in their UI kits.
> 3) they're not using native components but implementing them on canvas. This sounds extremely prone to issues and bugs and requires them to catch up to update stuff once platform holders change something in their UI kits.
Every native UI draws on canvas. So, drawing on canvas is technically as bug prone as a native UI.
Also, nothing breaks when platform holders change something in their UI kits, because Flutter is not using their UI kit (except of few fundamental things). Components continue to behave and look exactly as they did before.
If you want to mimic new design/behavior of platform's native components after an OS update, Flutter widgets need to be updated independently.
Yes, but not using native controls, while still trying to look and feel just like them creates an uncanny valley where things are just inexplicably off.
iOS in particular uses a lot of animations for context clues, and it is very hard to get right when you try to copy it.
There’s also a lot of functionality that is baked into native controls, such as accessibility and localization that are often missing from canvas drawn controls.
That's true. IMHO, solution to this is not trying to look and feel exactly like native controls, but focusing on providing universally good UI/UX instead. Good UI/UX can be independent of a platform it runs on.
Don't get me wrong, there are a few essential things that you have to mimic in order not to be too alien on a specific platform. But for everything else, try to provide best UI/UX for a specific task rather than trying to mimic some generic controls.
Making a good UI framework from scratch takes considerable amount of resources. The lack of accessibility and localization is usually due to insufficient resources from framework developers, not a technical limitation.
That is React Native isn’t it? A lot of people end up making custom components (using pure JS), but it’s completely possible to wrap native components and use them. The downside is someone needs to make the native component wrapper as React Native doesn’t really provide much in terms of that out of the box besides maybe a button component.
Expo has a new system that’s in beta that should make doing this much, much simpler (check out expo-modules).
As a user, I suppose it is disappointing there aren't bindings for _everything_ offered on the native platforms. However, there are a ton of packages provided by the community, especially since the "slim core" initiative from Facebook is pretty much done. They removed almost everything not essential from the core or React Native to make it much more focused and I suppose easy to maintain.
This isn't even true in the US unless you're only counting profits from selling the app itself or IAPs. Android users are most likely less profitable but not by that much, otherwise I'd expect an empty Play Store.
Use Expo. Ignore anything that ever mentions having to "eject" because that's the giveaway that the information is hopelessly, uselessly out of date. It's fine.
There is no need to eject when creating custom modules and the API for writing modules is fairly decent. Not entirely painless but miles better than a vanilla RN approach. We make extensive use of development builds and it's the feature I value the most - no need for Firebase or TestFlight for testing a branch.
I hate mobile app dev, but Flutter makes it fun. It's very quick to iterate with real-time hot rebuiling of widgets, and the built-in widget set is flexible and robust.
I'd be wary of using it for a really large project though, because of a) Dart and b) Google so it might die in the future. It also changes a lot, so be prepared for dev time if you're only updating the app every year or so.
It’s still worth the trade-offs vs developing for multiple platforms, but the experience continues to be incredibly painful.
Libraries that handle basic features like geolocation or the clipboard have been spun out of the main org, and the result is even worse reliability. Core features are also often superseded by libraries that are in a constant state of refactoring like Reanimated or React Router.
On the bright side, performance, memory usage and startup times have steadily improved so it’s possible to build apps that perform almost indistinguishably from native ones (at great human cost!).
Agree with this. Coming from native Android there's a lot I miss, but being able to compile to Android, iOS, Desktop, Web & mWeb saves us an insane amount of time.
Thankfully we have the budget to work with expert maintainers and sponsor external libraries which allows us to reduce some of the pain.
My experience with RN 2 years ago was that despite the usual headaches, it's a lot easier than dealing with native apps for most use cases. This was after years of doing native iOS apps.
We use it without many issues, but you need to implement native modules if you have to use device peripherals for some scenarios, e.g. IoT pairing via wifi or some bluetooth stuff.
Sure sometimes it can be frustrating, but to me is ok if your company is small and can't hire too many people in order to maintain two fully native projects.
Having no previous experience with RN, I wrote and released an iOS and Android app using Expo and their free hosted build system.
Yes it has some quirks and you should ensure plugins/modules can provide the functionality you need, but for me, from 0 to 100 (app idea to app store) it was easy.
Expo always if you want something akin to web apps in features, with a few extra. Go native (swift, kotlin) if you want something that should be a mobile app.
I use it, mostly with expo. Everything works out of the box and performance is actually surprising (because of Hermes engine), I'd say its a lot better than all other alternatives when it comes to cross platform development solution, simply because flutter is the only real competitor and flutter has few problems that makes it unbearable for me:
1) lots of copy-paste boilerplate code 2) ios apps behave weirdly in flutter (maybe they still havent fixed 1 frame lag with touch/swipe/scroll events? idk) 3) they're not using native components but implementing them on canvas. This sounds extremely prone to issues and bugs and requires them to catch up to update stuff once platform holders change something in their UI kits.
If I had to pick a tech right now, I'd go
React Native -> Jetpack Compose/Swift UI -> Flutter -> Anything else