React Native and its problems

In this article I am going to list some of the pain points I had working with react native while trying to create a small test mobile application with it.

Introduction

Previously I wrote native applications for Android and IOS that are used by thousands of people worldwide to access their transaction history and transfer money. In addition to that I started working on a website powered by ReactJS and I love working with ReactJS for the web.

After the first big release of react native for IOS I started following the history of the project a bit. Now that react native supports IOS and Android I decided to give it a shot and create a small test project.

And here the problems start

The first problem I encountered was the website itself. I understand that react native is not a write your code once and run it on all platforms but the website does not really make any nice differentiation between IOS and Android. Both platform components are mixed in one large list the only differentiation is the suffix that tells you if it is IOS or Android.

My second problem started when I was trying to change the application id for my android project. I’ve changed it in the gradle file (like I would do with a native Android application). But then the react-native run-android was all the sudden failing. After digging thru the code base of that run-android command [Pending bug report on github].

The eco system

Now that I had sorted out all the fixes and work around I decided to look how I can add routing to the application. My first thought was the great react-router project that I use for my web project. After all routing shouldn’t be really tied to a browser so I was hoping that the component works for react native too. Unfortunately I was wrong. But since I was planing to just create a very small application I’ve decided that routing isn’t really a deal breaker to me.

The great thing about React after all is the amount of components that are already available so you just need to plug it into your project. So I went out to search for a library to add facebook authentication to my app. I found a library made by facebook called react-native-fbsdk so I was very excited that at least that is gonna work for me. But again I was proven wrong.

Even Facebook can’t decide how to do it right

Even so the name speaks from react native fbsdk without platform limitation after reading the description it says “A wrapper around the iOS Facebook SDK for React Native apps. Provides access to login, sharing, graph requests, etc.”. Again it works fine for IOS but not for Android.  After that I decided to wait another year until I start looking into it again.

My take aways

The big problem is that react native are actual two libraries:

  • react-native-android
  • react-native-ios

But since it’s all labeled as react-native it is hard to figure out which external component/library supports Android or IOS or both. Another big issue to me is the very poorly written documentation in terms of finding the important information when I work on my Android application or on my IOS application.

I know that react native is still very young and evolving. For that reason I decided to wait another year before I start exploring react native again. After all the idea of sharing business logic while at the same time getting forced to work with the platform specific design and navigation patterns are very appealing.

Let me know what your thoughts are on react native.