React Native has become our go-to technology for developing multi-platform mobile apps. It has effectively replaced Xamarin, our former tool of choice, almost completely. Our UX Designer Joni Juup sat down with our developers Ville Ahti and Ossi Väre to find out what makes React Native so great.
Joni Juup: Previously, we’ve built multi-platform native apps using Xamarin. From my perspective – being a designer in our recent React Native project – the workflow with React Native seems noticeably faster. What have your experiences been with React Native compared to our previous workflows?
Ville Ahti: React Native has really boosted our development cycle. You can see the effects of your code almost immediately and best of all, the app state is retained over code changes so you can test your changes right away and don’t have to navigate back to the screen you were on.
React Native has really boosted our development cycle. You can see the effects of your code almost immediately.
Ossi Väre: Xamarin development is very different. When you make changes, you must sit through the long build and deploy times until you can actually see the changes in the app. As a result, you will spend a great amount of time waiting during development.
JJ: What do you think are the biggest advantages in using ClojureScript with React Native to develop mobile apps?
VA: ClojureScript (via a tool called Re-natal) enables us to write React Native apps with functional code. We are using the Reagent and Re-frame libraries, that make it possible to develop apps with a bigger focus on functional programming.
JJ: While developing React Native apps with ClojureScript has been quite fast, we’ve also tried to use the available components as much as we can. Do you see building custom components or views in React Native as less or more challenging than say, in Xamarin?
VA: In React Native, you can create two kinds of custom components and views, ones that build on top of the existing React Native code and ones that are implemented natively and bridged to React Native runtime. Creating custom components with React Native is quite straightforward. React Native also makes it easy to iteratively improve your code without needing to build the whole project.
OV: React Native makes using existing native components easy because native bindings are a lot more straightforward and less problematic than in Xamarin.
JJ: What do you think are the biggest challenges with React Native? What has caused you the biggest headaches so far?
VA: Mostly, React Native development has been almost completely painless. But of course, there are always some headaches with every framework. The issues we have had have usually been related to node modules that somehow get messed up, but luckily clean up and npm install has fixed them most of the time. Other issues are usually related to native components that might require some tweaking to get them to work in some specific use cases.
OV: When building an app with React Native, you need to use quite a few different tools. Thus, when a native build fails, it might require quite a bit of detective work to debug.
JJ: Are there any particular mobile app cases where you would opt not using React Native as the technology?
VA: I wouldn’t use React Native for an app that requires much animating and custom rendered UIs. Games are a good example of that.
JJ: What do you think about Google’s upcoming React Native competitor, Flutter?
VA: It seems very promising. However, It’s a quite young framework and thus has a smaller developer community. I don’t see it as a Rect Native competitor yet but it might be in the near future.