Hacker News new | ask | show | jobs
by dean_mcpherson 3730 days ago
Here's a bit about my experience with React Native.

I've been using React Native on iOS in production since last November for http://townske.com/app,

Over that period, I did hit some performance issues, but the vast majority of those were implementation flaws (i.e. my fault), not framework flaws. Real user feedback has been overwhelmingly positive, including being featured in the app store multiple times.

I just launched another app for iOS and Android last weekend (https://curbitapp.com) that was built with React Native in a few weeks, and shares about 80% of the codebase. I haven't spent any time optimising these apps for performance, other than following standard react best practices and see sufficient performance on both iOS and Android.

For someone who has a web background, React Native is a no brainer. 60fps native UI is generally attainable, you can use the exact same tooling (good dev tools, hot reloading), and you have the ability to pick up a large chunk of your code and put it on Android, or web, or now potentially OSX.

3 comments

I have to admit it's better than most web apps I've seen. However...

After downloading Townske I get hit by three modal dialogs one after the other:

* notifications

* location access

* query about installing an update, even though I've just downloaded the app. If I select install, nothing happens, no progress bar or anything.

Developing for a platform is more than having native-looking widgets, it also means taking conventions and user expectations into consideration.

I am referring to things like the tab bar which has a back button, having a next button and also page swiping in the intro, not throwing popus at the customer, etc.

The update message I've not generally seen before, but nearly every app I've used asks for at least the first two individually. The modals to allow notifications, location access, and other granular permissions on iOS is a good-practice pattern.
Agreed, we probably need to work on offsetting those prompts til after onboarding, and preparing the user. An implementation issue though, not a react native one.

The two permissions modals are required by iOS to access those features, and RN definitely has the ability to defer when those are shown.

The update prompt is actually from http://microsoft.github.io/code-push/ which allows us to push minor updates directly to the app without going via the app store. Say goodbye to 2 week time cycles. A newer release of Code Push actually doesn't prompt the user at all, and can download an update during use and load it when the app goes inactive.

Good onboarding will however prepare the user for the appearance of those dialogs, or ideally only present them when the user performs an action that requires access to e.g. location services or push messages.
Agreed entirely, if it's just blasting them out on first-use then they could definitely tighten that up.
I am pretty sure these things can be obtained, and will be easier to achieve as it matures.

As well as devs following good practice with modal dialogues.

I used Titanium to build a cross-platform app, and once I understood what it is writing with my JS, I could ensure native/performant UI elements and animations were being rendered.

Really excited to see how this pans out :`)

> I did hit some performance issues, but the vast majority of those were implementation flaws (i.e. my fault), not framework flaws.

I can't agree enough. Apps built with cross platform frameworks like Cordova and React Native will obviously be slower than their native counterparts, but I've seen the framework blamed for bad implementations many times. Once, we tracked down a horribly slow Cordova app down to too many localStorage accesses (solution: indexedDB or SQLite).

+1 for realm for react native.
Townske looks very polished, thanks for sharing your experience. Would love to hear more about the issues you faced and the pain points.

I especially enjoyed the subtle transitions and animations. I also saw a prompt to update immediately after downloading the app, which was strange. If you're updating the layout and such directly, then that's actually pretty cool. Is that the case?

I especially like that it gave me the option to register later (also the reason why I didn't get past Curbit intro since registration was mandatory). I was able to dive right in.

It sounds like an IP issue waiting to happen if you are admitting here to sharing 80% of the codebase from Townske (employer) into your Curbit (your personal app).

My interpretation was that the iOS and Android versions of Curbit share 80% of code wih each other, not with Townske
Correct, Curbit shares 80% between iOS and Android
Thanks aleem, I wrote up my initial experiences at https://medium.com/@dean_mcpherson/townske-app-in-react-nati... a while ago, some of the points are probably no longer an issue. As per my response above, the update prompt is for http://microsoft.github.io/code-push/.