As you already know, our team is a huge fan of React Native and we have published a lot of articles about this technology. But as everything else in the world, React Native is not perfect and has its disadvantages as well. We asked a few senior developers about the pain points using RN.
Since the technology is still new, React Native has small bags and developers constantly update the framework. The new problems appear every time after the updates:
“ There is quite a large number of little bugs appearing in the technology which creates the need of React Native being constantly updated. And each new version has its own problems, and since the builds are not properly assembled, the old libraries fall off. ”
“ The React Native itself is often updated, but the packages for it are not. Therefore, when a developer is in a hurry to install the updates, the problems with the libraries arise . Since there is a strong dependency on packages, as a developer you need to constantly monitor if the libraries are updated. ”
Some Applications are too large. It means that in theory such an app may work slow. Some developers said:
“React Native is known to have cross-platform components. Android and ios platforms have their own components that are wrapped in a react-like process. As a result, we get component nesting in a hierarchy from 5-15 View elements, which form a bridge to native platforms. This is causing a lot of trouble on the performance side.”
But this is just a widely spread fear. And it refers to the first days of React Native. In real life React Native apps are definitely slower than Native Apps, but you won’t see a difference with your eyes. Only synthetics benchmarks can prove that. The reason is that current mobile devices have great performance.
“Disadvantages: the big size of the final bundle and uploading speed (if comparing with Flutter, for example, and we are not even competing with native apps).”
“[…]there are problems with optimization, under heavy loads or with complex animations.”
React Native has a problem with C++ integration and it can be a problem:
“Poorly integrated with C++. There is a bridge to C++ with JS in the official documentation, but it has been at the development stage for a very long time and everything that is there is simply impossible to adapt to your needs. As you know, encryption, graph processing, and so on are done in C++. Therefore, in order to address RN in C++, we go through a huge stack of calls. From the android side: JS⇒ Java⇒ Jni⇒ C++. From the ios side: JS⇒ obj-c⇒ C++.[…], because of problems with the transfer of images, in most cases it makes no sense for us to work with C++ in this direction. I should mention about games, performance is very important for games and React Native will not give us this. ”
Professional React Native developers think that some parts of work with animation would be difficult to learn for beginners:
“An Animated package comes out of the box. Animations are executed on a JS thread and will run with a delay if the call queue is busy. There is a solution to the problem: the package React-native-reanimated. The animations described by this library are executed on the UI thread, providing fast response, but are quite difficult to learn, especially for beginners. ”
Also, you can find some disadvantages when your application should have some special functionality. For example, intelligent scanning:
“Tasks from the category of intelligent scanning of images using a camera are very difficult to implement, and sometimes simply impossible. Yes, there are solutions that allow you to scan QR-code and bank card numbers, but sometimes it just isn't enough. ”
Another nuisance may concern those who are working with code that is not their own and an error has occurred somewhere. You will have to spend a lot of effort in order to find the problem:
“Terrible error logging. In a huge project, that involves hundreds of files, an error may appear in an unknown location, and there is no way to know where. It takes a long time to find it. Therefore, a developer, when taking on someone else's project, can very often suffer because of this. ”
All the developers we spoke with in regards to their experience with React Native are from Belarus. We are interested to know: what do developers from other countries think?
Summing up I should mention that every tool was developed to solve exact tasks. There is no one technology for all needs and React Native is not an exception. He is doing great with it’s tasks. We just tried to show common issues that you can meet using React Native and spheres where you should not try to use it.