Skip to Content
All posts

React Native - Native or Hybrid?

#Culture#Tech

React Native is dominating the mobile app development landscape. I tried to come up with a justification of why based on my experience.

What’s React Native?

  • Native Application, not Hybrid
  • JSX and ES6+ JavaScript interface
  • Logic - JavaScript thread
  • UI - Main thread (and more for background computing)

Cross Platform

  • How does it work
  • Writing code in JSX blocks
  • Invoke platform API to display native elements e.g. becomes UIView for iOS and View for Android
  • React Native works like a connector between platforms
  • Business and View logic run by different threads

Lifecycle of new component

  • constructor() -> good place to add state unless you are using class properties
  • componentWillMount() -> avoid using it at all, if anything needs to be done with component do that in DidMount
  • render() -> React Element which will be rendered and made into native UI afterwards
  • componentDidMount() -> perfect place to call all side effects

Lifecycle of updating component

  • componentWillReceiveProps(nextProps) -> try to limit yourself just to this.setState only here
  • shouldComponentUpdate(nextProps, nextState) -> can be used for optimization
  • componentWillUpdate(nextProps, nextState) -> component will get an update, you can do some calculations here depending on current and next props/states
  • render() -> As in mounting component lifecycle
  • componentDidUpdate(prevProps, prevState) -> component got updated you can call some refs here or similar after update

How it does compare with other solutions?

  • More performant than Cordova with Ionic as it is Native vs Hybrid
  • Can reuse same code on all platforms (unlike Xamarin.iOS and Xamarin.Android, while Xamarin.Forms has same capability)
  • Flutter is new and not stable yet enough but it is promising as well
  • Most complete JavaScript solution as of now

The good parts (the final WHY)

  • Write once, use everywhere
  • Straightforward and easy to start if had experience with React previously
  • Can reuse same libraries as from Web for most of the things (redux, redux-saga etc.)
  • Satisfying performance
  • Community getting bigger on daily basis with plenty of packages that are getting available
  • Plenty of platforms that are supported with some additional packages (Windows 10, Windows 10 Mobile, OSX, Web)

The bad parts

  • Problems with updating packages and RN itself
  • No support for Android 64-bit (that’s need to be added as of 2019 it will be required)
  • Layers are pretty fast, but bridges might be bottleneck so this need to be considered when writing a native module
  • Rare cases where platforms JS interpreter are different (e.g. lack of Proxy within Android - requires polyfill)

React Native provides an interface (bridge) between the Native language and Javascript code. There are heated debates on whether React Native is a native or a hybrid solution. Personally, I consider React Native closer to native side, as Facebook officially claims.

_ We designed React Native such that it is possible for you to write real native code and have access to the full power of the platform._

You can side with or against me, but React Native still rocks, so does React.