Could you introduce your app in a few sentences?
GitPoint is an open-source mobile GitHub client built with React Native. Available on both iOS and Android, it is the most feature rich unofficial client that is completely free.
What made you decide to use/switch to React Native?
Quite a few years ago, I spent a very insignificant amount of time trying to build a basic Android application with Java but quickly stopped. Although it has improved remarkably since then, one of my biggest concerns with developing on Android Studio and using Java was that it felt slower than what I was used to with the web.
Once I became more proficient building web applications with JavaScript, I decided to give React Native a shot especially after hearing how it doesn’t produce hybrid apps similar to many other JavaScript-native mobile frameworks.
How did you transition to React Native?
So the majority of my experience before trying out React Native has always been focused on front end web development building apps with Angular. Unlike many people, I decided to dive into React Native without having tried React and although there was a tiny bit of a learning curve - I was amazed by how quickly and simple it was to start building components and screens. Styling in React Native felt so intuitive compared to my limited experience styling Android apps with Java/XML. When I then began to start using React at work, it was only at that point how much I realized how pretty much identical the API was.
So all in all, I couldn’t have asked for more of a smoother transition. I do think mobile developers with limited JavaScript experience will definitely have to spend a little more time trying to familiarize with the framework.
Have your tried other cross platform technologies before using React Native?
I never tried Ionic or any other hybrid app framework, unfortunately, although I’ve been curious to try them.
What has your experience been working with React Native in terms of app performance, have you noticed any impacts?
No contributor has yet written any native modules for GitPoint which I am quite pleasantly surprised with. My initial impression of React Native was that a lot of custom native code would need to be written in order to get varied functionality in place, but the only native modules we’ve included in GitPoint have been third party libraries with a JS bridge that just allowed us to link seamlessly.
With that being said, we still notice performance hits from time to time especially in a few components that have some significant logic in place before/during rendering. We’ve also noticed that it usually seems to be more noticeable on Android. However, I don’t think we’ve had something too complex that we couldn’t refactor to provide a smoother experience but I can only imagine more complex apps might need more custom native modules built to prevent bridging complex processes over the thread.
How has adopting React Native affected developer productivity?
So I started building GitPoint on my own and very quickly realized that the size of the app was quickly becoming much larger than a small side project. Although it took me a while to release the first version of the app, I enjoyed using the same screen/component Redux container pattern that I still use today for React apps that helped me build new screens with ease. All in all, I was extremely impressed (and glad) I had decided to give React Native a shot for building GitPoint.
Which tools, libraries and frameworks are part of your development process with React Native?
Navigation is usually the first thing I consider building a new React Native app as chances are it’s going to consist of multiple screens. React navigation and react-native-navigation are two libraries I use quite often. Aside from that, my toolchain will usually consist of libraries I would use in a typical web app. Redux, redux-thunk, redux-persist and recompose are just a few examples.
Aside from popular JS libraries, I’ll start looking for open source native modules from time to time if I need something in particular, such as react-native-safariview for example.
What resources have you used to learn React Native? Books, tutorials, courses etc. Anything you can recommend?
So the React Native documentation is what got me started. After that it was mainly finding online tutorials that showed specific things that I needed and piecing them together.
With that being said I couldn't find any complete detailed resource at the time after spending some time searching. For that reason, I'm currently writing a book with the FullStack team to provide a complete guide to learning React Native (a book I wish I had when I started learning it myself)). It's already been released with almost half the chapters already available. We're releasing a new chapter roughly every month until completion.
What are some things that you don’t like about React Native or that need to be improved?
I don't think there are many things I don't like about React Native. One thing that does come to mind however is that I think the majority of the community is heavily focused on the JavaScript side. I think React Native can get significantly more powerful if a large number of the community are curious enough to dive into the native side more to create so many necessary core native modules and bridge them seamlessly (as well as improve how the native thread communicates with the JS layer). I fall right into this category and I'm hoping this will change in the near future.
Anything else you would like to mention?
If anyone wants to reach out about my experience with GitPoint, will like to get involved or want to connect with me about anything at all - please shoot me an email or slide in my DMs in Twitter!