Consider two scenarios:
A team is using React for their client side web application, Ruby on Rails as the server, Swift for iOS, and Java for Android.
This creates some problems, to list a few:
- This requires developers for each language, or more advanced developers comfortable in writing the required languages.
- Logic cannot be easily shared between platforms because of a language gap, breaking one of the commandments of coding (NEVER REPEAT THYSELF).
- Keeping all of the application updates in sync is a logistical mess. If the web team falls behind (you know how those web guys are...) the React application will seem significantly worse in comparison to the iOS and Android applications.
A second team is using React for their client side web application, React Native for mobile applications, and Node as a server.
A well designed application using the above technologies works around all of the above issues.
Regarding well designed... A well designed application in this context would mean keeping only the code required for the view portion of the application unique to each of the client types. Any and all logic that isn't completely unique to the view would be pulled out into services available to the entire application.
A closer look:
- Because the team is using one language for all of their development, a company can hire fewer, more specialized developers.
- Logic is easily and automatically shared throughout the whole application. Both the mobile and web application are hitting the exact same function for data parsing. Changing that one function propagates throughout the entire application immediately.
Tools like React Native are still in very early stages and come with their own pro's and con's. Just this past weekend I spent a significant portion of time trying to get React Native to play nice with my web application.