The React Native team has been doing phenomenal work and having just finished my first React Native app it's definitely the first kit I'd reach for if I needed to write a cross platform app.
However, I'm still not convinced that it makes sense to use a cross platform toolkit if the app is your primary product. If you just need some kind of mobile support for an existing business or service then React Native is a smart choice. But if the app is your bread & butter I think there are still too many drawbacks to working at an abstraction so far removed from the core native APIs.
And as much as JS has improved recently I'd still prefer to work in Swift or Java (or Kotlin) if I have the option.
I've tried a couple cross platform frameworks (mostly Xamarin and PhoneGap/Cordova) and am aware of some challenges there.
To me, Xamarin is like programming for each platform, just in C# and with another layer of bugs (and weirdness, I would say, and don't even mention Xamarin Forms). Of course, you get the possibility to share BL in a common layer, but pay for it in terms of instability and complexity to get stuff working native-like. Good for trivial GUI, BL-heavy apps I guess, but not for complex GUI, little shared BL apps.
PhoneGap/Cordova has some serious complications when it comes to predictable rendering due to the plethora of possible rendering engines you may encounter. Any non-trivial layout/styling can be completely messed up on different platforms, or even different versions of the same platform. Also it can be a challenge to achieve native performance and feel.
How would you say React Native compares?
It seems it could be more able to adapt to the platform compared to PhoneGap/Cordova, and easier (perhaps) to work with than Xamarin.
I'm considering using it in an upcoming project where both Android and iOS are required, and given my lack of iOS-experience, it seems like a good alternative.
I did a React Native iOS project last summer, and you should be aware that you do need to write a lot of native code to do non trivial things. Think of React Native as more of a view layer than a whole framework, and realize that JS is simply too slow to do things involving realtime reactions to sensor data (including touch) or images, sound or video.
I like React and React Native, but the latter hits me as not being the best choice form mobile development, especially for a small team: imagine you are developing an app for Android and iOS in React Native, you got your Android developer and your iOS developer learn React, they start implementing, they stumble upon a roadblock and need to dive deeper in the platform to solve; it's alright they were doing Native before, they can handle it, but soon, as they need to focus on being more experienced in React, they might feel less comfortable with evolving best practices in the underlying platform. Now you need to keep up to date in the native platform and in React.
I wish react native the best and I am going to use it some times (it has lots of perfect use cases in simpler apps, in my opinion), but for more involved projects, I would still choose Java/Swift (and how about a react style framework in the native frameworks?) :)
I'm also interested in applying React's declarative model of UI building to native environments. I guess I should spend more time with ReactiveCocoa, RXJava etc.
For those interested, Facebook has a site http://makeitopen.com blogging about how they build F8 (Reactive Native app for iOS and Android) for their recent conference. Advisable to read only if you have some basic knowledge of React Native. Too many techs: React, React Native, JSX, Flux, GraphQL, Relay, Redux, Flow, Jest, Webpack.
One thing that is not clear is their direction with Redux vs Relay. In the F8 app, they're actually using both in separate portion of the app. I understand the guy behind Redux is now working for Facebook. Are they going to combine Redux with Relay? Or build Redux+GraphQL? Both techs has seemingly similar use case.
Relay makes it easy to query for data that lives on the server and is backed by a schema. Redux makes it easy to map actions into a local state. In most apps you'll have a need for both.
The Relay team publish their roadmaps publicly. I believe there is a plan to eventually handle client state.
A review that mentions no pain points at all reads a bit like an ad. It makes me feel suspicious. Such a big change in the way people build apps can't go without hurdles.
React Native uses a site called ProductPains for people to report the issues that they run into and upvote them, it can give you a good idea of what the problems are: https://productpains.com/product/react-native?tab=top
In my eyes, the biggest pain points right now are: list views and complex gestures. List views don't recycle native views so memory usage can be very high (but there are some people working on solving this), and complex gestures just aren't really supported -- and by that I mean something like multi-touch to drag multiple slides in Keynote and a bunch of the crazy stuff that the Apple Maps app does (see https://www.youtube.com/watch?v=uBYPqb83C7k for more info on this). Also potentially of interest, see these slides: https://www.dropbox.com/s/fr46d25zfm6oaqu/philly.key?dl=0 (warning: requires Keynote and 1.2gb because lots of video!)
This is probably a frequently asked question, but why doesn't React Native implement its own list views, rather than wrapping UITableView (for iOS) and ListView (for Android)? I figured the latter approach would be the best way to address things like recycling native views.
The short answer is that UITableView is an inherently synchronous API whereas the React Native bridge is asynchronous -- UITableView calls cellForRowAtIndexPath:indexPath: and heightForRowAtIndexPath:indexPath: and you need to respond synchronously with the view for and the height of that cell.
One of the problems with this is that under the current React Native architecture we would need to break the async bridge model by synchronously calling into JS in response to these methods. So some people are experimenting with a slightly different architecture that would allow us to respond to them synchronously from the main thread, which seems really promising :)
Stupid question: anyone using React Native on Android in production (other than Facebook that is)?
Would you recommend using React Native instead of developing Android apps the traditional way if I don't already have experience with Android development?
I code in both Swift and Java (and a little Kotlin) but I think RN was better for this project:
* Cross platform with very little extra effort (it only took a couple of hours to take iOS version, make quite a few improvements to both versions and a few changes for Android and ship it).
* The game relies on a somewhat complex UI with simple updates... React/Javascript makes this kind of thing a lot easier to code than say using some kind of complex custom state/view objects in Java.
* Adding a tutorial was way easier thanks to Javascript's blurring of code and data
* Live reload (and now hot reload!) are amazing. Better than than even Android Studio's new "instant" run.
IMO if you can afford to spend double time rewriting your app for another platform, just use native and don't think twice. But if you are constrained, react native might be a good choice among current cross-platform solutions.
There is enough to learn in native mobile before jumping into a wrapper for it. You read the RN docs and you'll see you still need to know the underlying tech pretty well.
If you aren't fully invested with React, you may consider NativeScript: https://www.nativescript.org/ The Android experience is a bit more mature, and you can still write cross-platform mobile apps with JavaScript (or Angular) without being in a WebView.
Don't have a production app, but i am developing a mobile app for a existing service. The app is very simple at the moment. App loads remote data and uses aysnc storage as well. I don't have Android exp except for tutorials. Getting to understand the React Native framework took some time but then its very straight forward easy process(Just Android app, have not tried out iOS). I do have good React exp which helped. For simple app it seems a very good solution.
I very seriously looked at React Native when developing my cross-platform app Countism ( http://countism.com/ ), but ultimately decided against using it due to the sheer number of features I would have to either write on my own or use 3rd party modules for (TableView, SQLite, etc.).
React is awesome and I love the promise of using the same concepts for native apps, but there is still a large commitment required to hand write a lot of extra code for full support on multiple platforms.
For now, Appcelerator Titanium is my tool of choice for cross-platform apps. It has much more stable cross-platform APIs and support, but even it has several quirks here and there, and doesn't support some more modern JavaScript features (ES2015, fetch, Promise) like React Native does out of the box.
For people who read this and are curious for more perspective on React Native and Titanium, there's a nice discussion here on the React Native Community Facebook Group with a developer who used to work at Appcelerator and now runs an agency where they use React Native exclusively: https://www.facebook.com/groups/react.native.community/perma...
Same question for me. We need a few permissions like SMS read (for phone number verification), NFC, GPS,etc...and I'm wondering how production ready React Native is.
SMS Read: You can start with manual entry of phone number verification. Top of the line android and iPhone apps still use manual entry of verification code and still offer good User Experience.
NFC: Except for payment, I never used NFC for anything, never seen any of my friends use it for any practical purpose. If your app is using payment systems, forget react native.
Something like Appcelerator Titanium took years to mature and become stable, I don't think you can get a multiplateform solution right that fast. It seems that React native on Ios is more stable than it is on Android. I wouldn't use it in production for android.
We are a Mumbai based home to office bus service marketplace. We recently ported our driver app to react native and the experience has been great. The app has been pretty well received.
Is there a 1,000 ft overview of React Native with a brief description of how it works, its capabilities and its limitations out there?
There's so much hype surrounding this framework, but also a lot of criticism and its extremely difficult as an inexperienced outsider to quickly determine whether or not React Native is suitable for a given project.
When I look at another cross platform framework like Qt, I can usually get a better idea of what it can do. But with React Native, its way harder to get that big picture because it seems like it wraps some native components but not all of them, etc.
Everything I read about React, especially from Facebook just seems like a puff piece. Because I know there are Facebook devs browsing this: please consider writing a proper summary.
No, I'm not a web developer. I've tried reading some React articles. There are lots of points that are brought up again and again (diffing for minimal incremental updates, unidirectional flow, etc) that I find really hard to care about since I've never encountered them in the kind of native development I do.
Just because you aren't a web developer doesn't mean you can't dabble in web development. Take 30 mins to play with their starter kit [1] or just play around inside JSFiddle [2]. Now imagine being able to encapsulate your native components the same way.
IMO encouraging you to isolate state management is the biggest win. JSX and component-based abstraction are really fucking powerful too though.
I believe the greatest benefit of react is that its javascript, html and a familiar framework. Outside of that, the diffing is only "good" now is because drawing is the bottleneck. Arguably, it may be possible to have a faster framework that doesnt need to iterate over every item in a list to check for item changes.
If you have junior devs, having them learn one framework would likely be far easier than different ones for different environments. Personally, I really enjoy thinking in react. Its opened my eyes up to opportunities, relation and application to Oop in general.
Ionic2 + Angularjs2 stills looks easier in this case, i.e. for simple/non-performance-critical apps you can do angularjs then use ionic2 to get cross-platform apps, for native performance you stick with java/swift. I'm not fully convinced react-native is the (efficient and simple) way to go while I like React a lot.
It's interesting to see how they are overcoming some of the issues that large projects experience when using GitHub. Their mention bot in particular (https://github.com/facebook/mention-bot) looks like a very attractive piece of software for teams using GH (open source or not).
Seems like it still needs a huge chunk of Android-SDK and VM and stuff. I was like "I'm doing React for a year now, lets try this on an afternoon", but then I had some issues that didn't even had something to do with React Native that prevented me from getting things running.
Well, maybe I'm too pampered from web-development, haha
One concern I've heard about React Native a few times is that the UX is not at par with real native apps. Does the React team understand why is so, and have a plan for fixing this?
Or is React Native consciously intended as a tradeoff between UX and development time?
I hear lots of success stories with React Native but how come I don't see any recognizable names in the list of apps built with React Native? One possible explanation could be that the most popular apps can afford dedicated iOS/Android teams or have been around longer than one year.
At the very least I don't think Flutter is wrapping native UI components. Flutter renders its own widgets written in Dart and using Skia as the underlying graphics library. So it seems more like QML in that sense.
Quick example why its not supported: Lets say you are building an instagram style app. You need to render an image from network and won't tell the app its vertical height(Just like you would do in a webapp)
The app has to judge the image height after the image is finished loading from the network. If the second image loads faster than the first image, then UI has to push the second image further below to make space for the first image. This will make the app look jittery.
If you're interested in learning more about React Native, I have published one of the most comprehensive and certainly highest reviewed tutorials here: https://www.udemy.com/reactnative/?couponCode=4HN
I've had a great year with React Native. The number one selling point of the platform for me is productivity; I can create mobile apps and iterate on them awfully quickly compared to what I was able to achieve with native iOS (never worked on Android).
However, I'm still not convinced that it makes sense to use a cross platform toolkit if the app is your primary product. If you just need some kind of mobile support for an existing business or service then React Native is a smart choice. But if the app is your bread & butter I think there are still too many drawbacks to working at an abstraction so far removed from the core native APIs.
And as much as JS has improved recently I'd still prefer to work in Swift or Java (or Kotlin) if I have the option.