In case you’re interested, here’s a more detailed description of how React Native works under the hood.
I got a similar article on React’s Future! Since React Native depends on React.js, that might be interesting, too!
# What’s good about React Native
The value proposition of React Native - build native mobile apps with web technologies - is pretty sweet.
That saves you a lot of time - you don’t have to learn these extra languages after all. It also allows you to share some code between your React for web and native app projects. Not all code though, because React Native doesn’t support HTML elements you would use in the browser, but all your core business logic at least.
In addition, React Native, just like React.js, is maintained by Facebook.
This is great because it means that you got reliable maintenance and a strong marketing machine behind React Native. Facebook is using React Native for many of its own apps (e.g. parts of Instagram) and it therefore proves that you can use React Native in major apps.
# What could be better?
That brings us to the weaknesses.
You might want to use a certain native platform feature - e.g. the camera or TouchID.
In such cases, you got a couple of options:
- Look for implementations in React Native itself (here’s a list of the core APIs)
- If not implemented in React Native itself, search for community-managed packages
Whilst writing your own native code + connecting it is possible (and actually part of React Native’s philosophy - it’s not meant to be a “nothing else required” solution), that requires you to learn at least a bit of ObjectiveC (iOS) or Java (Android) code. And that costs time.
Of course, you typically still save a lot of time because you don’t have to write the entire app in native code.
And in many apps, you very likely never have to write any custom native code.
React Native itself doesn’t really ship with a lot of native platform features - it primarily focuses on giving you the build process, the compilation process/ workflow and the core native building blocks (components) you need to build mobile user interfaces for iOS and Android.
The downside of this approach is, that you rely on the community packages being actively maintained - and you have no guarantee for that.
The bigger packages (e.g. camera) are probably not going anywhere but you might face scenarios where a package is not up-to-date with the latest React Native version or where some bug hinders you from progressing. In such scenarios, you need to find workarounds, fix the issue yourself or pick another package.
# What will change in 2019?
Partly because of some of the mentioned problems of React Native, AirBnB stopped using it for its native apps.
Of course, AirBnB wasn’t the only big company using React Native but that still was a pretty big hit. One can only assume that it pushed the React Native team further into re-thinking React Native.
At least, that is what the React Native team did in 2018, described in a thorough blog post.
In addition to these changes, the React Native team is also working on other initiatives that should lead to the entire ecosystem working more like “one big solution”, rather than the current state of “React Native + third-party packages”.
This re-architecture is pretty exciting and has the potential of bringing React Native onto a new level! Whilst some disadvantages will of course still exist, these changes should improve the performance and reliability of React Native. It should also make it easier to create and maintain packages that tap into native device features - removing some of the uncertainties you’re facing when using community packages for that.
This re-architecture changes a lot of things internally but should only introduce minor (if any) breaking changes to the apps that use React Native.
# What will change in 2020+?
The initiatives laid out in the previous sections are not necessarily all completed by the end of 2019. It’s a huge process after all and the goal of having a stronger, more integrated community and fast-moving smaller pieces is an ongoing process.
Whilst most work will very likely be done by the end of 2019, we will certainly see more efforts and improvements in 2020. But most likely the current re-architecture efforts will provide a foundation that then doesn’t have to be touched again in 2020+.
What I wouldn’t expect though (because it’s not the goal and philosophy), is, that you get auto-adopting (to iOS/ Android styles) UI components. After all, React Native embraces the idea of providing the primitive building blocks and giving you as much flexibility as possible.
It has its issues, but all cross-platform solutions (like NativeScript etc) have such rough edges - React Native simply is no exception.
But with the planned re-architecture, the team behind React Native seems to be doing the right thing.
I’d expect React Native to continue to grow in the future, I would also expect that more and more bigger companies (re-)consider it for their next apps.