Could you introduce your app in a few sentences?
Crypto Coin Bull is a personal React Native project available on both the Google Play and Apple IOS stores. It's essentially aimed at users interested in the tracking the crypto currency market ( in the industry it's called trying to #lambo ). It tracks prices, news and makes a best guess as to which token(s) are increasing in value with it's Bull Rating property it calculates.
It also offers various other useful and fun features like portfolio management without the need to login or signup, crypto currency to crypto currency conversion tool, multi lingual and multi fiat currency support and the ability to change the apps theme. The Sith Lord theme being my current favourite, the default Jedi Knight also seems popular - everybody loves Star Wars right?!?
What made you decide to use/switch to React Native?
How did you transition to React Native?
The whole development process maps very well to developing frontend web applications in terms of architecture and styling your components. I couldn't believe how easy it was to get into. It's literally just a case of using the appropriate React Native tag eg.
FlatList etc instead of the HTML equivalent and BOOM - off you go!
Have your tried other cross platform technologies before using React Native?
Years ago I worked for a media company where we were prototyping applications in Phone Gap and any modern day web application is built as a progressive web app or at is at least responsive but you just don't get anywhere near the native feel and being able to tap into what the hardware is capable of.
What has your experience been working with React Native in terms of app performance, have you noticed any impacts?
For 99.99% of the stuff Crypto Coin Bull is doing the performance is spot on. The data list on the currencies isn't huge and sits with about 1400 models when a user chooses to load all, scrolling through them is seamless!
I think the area of the application that could be due some improvement is the graphing on the currency detail screen. As this was a spare time project I didn't have a lot of time to invest so in the end I rolled out a horizontal
SectionList and made the pure component items look like bar charts with animation and style. It gets the job done but the performance could be better if I went with something else.
In summary the React Native performance has been great, where I noticed it wasn't keeping up is probably more down to the mis-implementation of the feature rather than the React Native library itself.
How has adopting React Native affected developer productivity?
After I built Crypto Coin Bull I went on to build another two applications in much less time. The speed at which you can crank out an application for both the Google and Apple stores at the same time is currently unbeatable. Especially if it's a single cowboy spare time project like Crypto Coin Bull.
The React solution to creating 'dumb' UI components is extremely productive if you're building more than one application as you can literally reuse these components over and over again. It definitely makes you a better developer when you start thinking about the UI like this. I used to swear by MVC but it can become very complex very quickly and trying to realise application state at any stage within a user journey becomes hard work. Then someone asks you if you want a coffee ... and BOOM that realisation is gone! React and Redux literally remove this obstacle.
Which tools, libraries and frameworks are part of your development process with React Native?
I would highly recommend the Expo.io toolchain to build React Native applications with. The fact that you can scan a QR code on any device with Expo installed and your application loads with hot reloading is incredibly useful. It will also take care of all the compiling and error checking and you can ship updates to your users over the air. So in cases where you find a bug you can literally deploy a fix instantly - no need to compile and submit a release for a review which can take 2 days or more! Being a one man band project this tool was probably my biggest enabler. The VS Code IDE I have recently switched over to has a lot of React support as well.
If you're using flux architecture to maintain your application state the Redux Logger is a must during development.
The application also ships with Sentry to report any issues or exceptions in the production application. There is a facade into both Google and Amplitude analytics libraries as well - this was great as I was shipping feature by feature and the analytics feedback on what users were using really helped managed where I spent my development time.
What resources have you used to learn React Native? Books, tutorials, courses etc. Anything you can recommend?
What are some things that you don’t like about React Native or that need to be improved?
Off the top of my head I can't think of any. I didn't experience any pain points during the entire process, from getting my feet wet to submitting my first compiled application for review - you go from zero to hero very quickly.
The only gripe, if I had to really think about it, would be the compiled source size. I think it more has to do with the Expo.io toolkit rather than React Native itself. Essentially it ships every SDK it supports even if you're not using them so in the end a small application can have a pretty big footprint. It's in their roadmap to address this, it might have already happened but that would be my only concern.
React Native is the Rosetta Stone for the Google Play and Apple IOS applications - it would be amazing if they supported TV and console apps as well!
Anything else you would like to mention?
I had a really great experience building my first React Native application. I highly recommend the technology both for companies or if you just fancy having a go at developing a native application like I did. If anyone has any questions or would like to contribute or help improve the application please get in touch at firstname.lastname@example.org, my name is Stuart Pretorius.