- Home
- >
- Software Development
- >
- React Native and the New Dream of Learn Once, Write Anywhere – InApps 2025
React Native and the New Dream of Learn Once, Write Anywhere – InApps is an article under the topic Software Development Many of you are most interested in today !! Today, let’s InApps.net learn React Native and the New Dream of Learn Once, Write Anywhere – InApps in today’s post !
Key Summary
This article from InApps Technology, authored by Phu Nguyen, explores React Native, a framework developed by Facebook that extends the React JavaScript library to mobile app development for iOS and Android. It introduces the paradigm of “learn once, write anywhere”, enabling web developers to leverage existing skills for mobile development, contrasting with the elusive “write once, run anywhere” goal. Key points include:
- React Native Overview:
- Purpose: Allows developers to build native mobile apps using React, a popular web framework, adopted by companies like Netflix, Airbnb, and Dropbox.
- Target Audience: Web developers transitioning to mobile development and seasoned developers seeking rapid mobile app creation with familiar tools.
- The Dream of Cross-Platform Development:
- Historical Challenge: Traditional cross-platform frameworks (e.g., Java, C# Xamarin) aimed for “write once, run anywhere” but often resulted in “write once, debug everywhere” due to limited code reuse and performance issues.
- Limitations:
- Restricted access to low-level hardware APIs (e.g., GPS, multi-touch, tilt).
- Significant performance penalties in cross-platform solutions.
- Friction for web developers learning new mobile development toolchains.
- React Native’s Approach: “Learn Once, Write Anywhere”:
- Philosophy: Focuses on transferring React skills to mobile platforms rather than universal code sharing, reducing the learning curve.
- Current State: Limited code sharing between React web, iOS, and Android apps, but Facebook aims to improve this.
- Structure: React is split into React (core logic) and React DOM (web rendering), allowing platform-specific rendering (e.g., iOS components or Android DrawerLayout) while maintaining similar app structures.
- How React Native Works:
- Virtual DOM: React uses a lightweight virtual DOM (JavaScript objects) to minimize actual DOM manipulation, improving performance by applying only necessary changes.
- Mobile Adaptation: Replaces DOM with platform-specific UI components (e.g., TabBarIos for iOS, DrawerLayout for Android), maintaining a consistent component hierarchy.
- Benefits:
- Developers use familiar React syntax and patterns across platforms.
- Porting apps between iOS and Android involves swapping components, not re-architecting, simplifying the process.
- Example:
- iOS Code Sample: Uses TabBarIos for navigation.
- Android Code Sample: Uses DrawerLayout, but both share a similar component structure, easing development and porting for React developers.
- Impact and Adoption:
- Industry Use: Companies are increasingly adopting React Native for its efficiency and developer-friendly approach.
- Future Potential: While still evolving, React Native is a strong contender for a sustainable cross-platform solution, balancing performance and developer experience.
- InApps Insight:
- InApps Technology leverages React Native for mobile app development, integrating Microsoft’s Power Platform and Azure, using Power Fx for low-code prototyping and Azure Durable Functions for scalable workflows.
- Combines Node.js, Vue.js, GraphQL APIs (e.g., Apollo), and Azure to deliver cross-platform, user-centric solutions, targeting startups and enterprises with Millennial-driven expectations.
Read more about React Native and the New Dream of Learn Once, Write Anywhere – InApps at Wikipedia
You can find content about React Native and the New Dream of Learn Once, Write Anywhere – InApps from the Wikipedia website
Created by Facebook and currently utilized by companies such as Netflix, Airbnb, Dropbox, as well as many others, the React JavaScript framework offers a fresh approach to creating user interfaces and is one of the hottest new web front end technologies. Now, with React Native — now available for iOs and Android — curious mobile developers can begin learning what makes React so special. Additionally, React Native can be used by seasoned web devs looking to spin up a quick mobile app, now have another handy tool to enable them to do so, whilst being to carry over a majority of their current skill set.
The Dream of Write Once Run Anywhere
From Java to C# Xamerian, the ability to write a single code base that works across multiple platforms has been the holy grail of mobile development. Additionally, many developers have far more experience with web development toolchains, than they do with mobile development ones, and are reluctant to expand a large amount of time and effort learning “yet another framework.”
But many are finding the “write-once, run-anywhere” paradigm is closer to “right-once, debug-everywhere” at best, and at worst being able only to carry over only a tiny bit of app logic and code over from system to system.
The other major limitation with some incumbent solutions is a lack of proper access to low-level hardware APIs — such as GPS, tilting, and multi-touch features. Finally, many of the current cross-platform mobile frameworks suffer from substantial performance penalties.
Even in the best case scenario, your average web developer is going to experience a substantial amount of friction switching to mobile development, and will often end up developing a subpar mobile application.
Redefining the Dream
While any developer would love it if their code just ran anywhere, this is a difficult problem to solve. It is somewhat of a workaround solution to the actual underlying issue: Most developers want to be able to carry over their skill sets from environment to environment, and don’t want to learn everything from scratch, just to target another platform.
While still a difficult problem — and perhaps not as ideal as simply having one code base run anywhere — this is a tractable problem to solve. With React Native, the new paradigm is “learn once, write anywhere.” With this approach, an experienced web React developer can get up and running, and write Android or iOS apps at a much faster pace.
Currently, there is a little to no code sharing possible between React apps on the web, Android, and iOS React apps. With time, Facebook hopes to allow code sharing between target platforms. To understand how this will be facilitated, we can look at how React for web was broken into two packages: React and React DOM.
Not About the DOM
At its core, React was never about the Document Object Model (DOM), the standard HTML API for browsers to interpret web pages; the DOM was just an implementation detail to how React was created for the web.
When programming in React, one ideally doesn’t do any work with the actual underlying DOM; instead, one stays within React’s virtual-dom and let’s it figure out how that translates to the real DOM.
For those who aren’t familiar with React’s virtual-dom, the virtual-dom is a lightweight abstract description of a DOM. The actual DOM is quite heavy weight and a resource hog while React’s virtual-dom is composed of lightweight JavaScript objects. Instead of going straight to the DOM, each change in your applications DOM generates a new virtual-dom and is compared with the previous iteration. This difference is then applied to the actual DOM.
This approach is efficient as React does the minimum amount of actual DOM manipulation necessary to bring us to this new state, even if conceptually we can view it as we are just regenerating the entire DOM with each change to our application. This allows developers to reason easily about application state and in an immutable way, while getting all the performance benefits of making small changes to a mutable document structure.
But What About iOS and Android?
Given that, how does this relate to the bigger picture of React not being about the DOM? Well, imagine instead of the DOM, we are composing an app made up of iOS components, or even more abstractly, any set of UI widgets for a platform. We can still describe the app as a series of nested components, where we will define our “pseudo” components, that eventually resolve to actual UI widgets or DOM elements. For example, let’s say we had a fairly typical app with navigation. The official React Native site provides an iOs code sample for this:
<br />
class <span class=”token class-name”>App</span> extends <span class=”token class-name”>Component</span> <span class=”token punctuation”>{</span>
<br />
<span class=”token function”>render<span class=”token punctuation”>(</span></span><span class=”token punctuation”>)</span> <span class=”token punctuation”>{</span>
<br />
<span class=”token keyword”>return</span> <span class=”token punctuation”>(</span>
<br />
<TabBarIOS<span class=”token operator”>></span>
<br />
<TabBarIOS<span class=”token punctuation”>.</span>Item title<span class=”token operator”>=</span><span class=”token string”>”React Native”</span> selected<span class=”token operator”>=</span><span class=”token punctuation”>{</span><span class=”token boolean”>true</span><span class=”token punctuation”>}</span><span class=”token operator”>></span>
<br />
<NavigatorIOS initialRoute<span class=”token operator”>=</span><span class=”token punctuation”>{</span><span class=”token punctuation”>{</span> title<span class=”token punctuation”>:</span> <span class=”token string”>’React Native'</span> <span class=”token punctuation”>}</span><span class=”token punctuation”>}</span> <span class=”token operator”>/</span><span class=”token operator”>></span>
<br />
<<span class=”token operator”>/</span>TabBarIOS<span class=”token punctuation”>.</span>Item<span class=”token operator”>></span>
<br />
<<span class=”token operator”>/</span>TabBarIOS<span class=”token operator”>></span>
<br />
<span class=”token punctuation”>)</span><span class=”token punctuation”>;</span>
<br />
<span class=”token punctuation”>}</span>
<br />
<span class=”token punctuation”>}</span>
import React<span class=“token punctuation”>,</span> <span class=“token punctuation”>{</span> Component<span class=“token punctuation”>,</span> TabBarIOS<span class=“token punctuation”>,</span> NavigatorIOS <span class=“token punctuation”>}</span> from <span class=“token string”>‘react-native’</span><span class=“token punctuation”>;</span> class <span class=“token class-name”>App</span> extends <span class=“token class-name”>Component</span> <span class=“token punctuation”>{</span> <span class=“token function”>render<span class=“token punctuation”>(</span></span><span class=“token punctuation”>)</span> <span class=“token punctuation”>{</span> <span class=“token keyword”>return</span> <span class=“token punctuation”>(</span> <TabBarIOS<span class=“token operator”>></span> <TabBarIOS<span class=“token punctuation”>.</span>Item title<span class=“token operator”>=</span><span class=“token string”>“React Native”</span> selected<span class=“token operator”>=</span><span class=“token punctuation”>{</span><span class=“token boolean”>true</span><span class=“token punctuation”>}</span><span class=“token operator”>></span> <NavigatorIOS initialRoute<span class=“token operator”>=</span><span class=“token punctuation”>{</span><span class=“token punctuation”>{</span> title<span class=“token punctuation”>:</span> <span class=“token string”>‘React Native’</span> <span class=“token punctuation”>}</span><span class=“token punctuation”>}</span> <span class=“token operator”>/</span><span class=“token operator”>></span> <<span class=“token operator”>/</span>TabBarIOS<span class=“token punctuation”>.</span>Item<span class=“token operator”>></span> <<span class=“token operator”>/</span>TabBarIOS<span class=“token operator”>></span> <span class=“token punctuation”>)</span><span class=“token punctuation”>;</span> <span class=“token punctuation”>}</span> <span class=“token punctuation”>}</span> |
And the “equivalent” Android version:
<br />
class <span class=”token class-name”>App</span> extends <span class=”token class-name”>Component</span> <span class=”token punctuation”>{</span>
<br />
<span class=”token function”>render<span class=”token punctuation”>(</span></span><span class=”token punctuation”>)</span> <span class=”token punctuation”>{</span>
<br />
<span class=”token keyword”>return</span> <span class=”token punctuation”>(</span>
<br />
<DrawerLayoutAndroid renderNavigationView<span class=”token operator”>=</span><span class=”token punctuation”>{</span><span class=”token punctuation”>(</span><span class=”token punctuation”>)</span> <span class=”token operator”>=</span><span class=”token operator”>></span> <Text<span class=”token operator”>></span>React Native<<span class=”token operator”>/</span>Text<span class=”token operator”>></span><span class=”token punctuation”>}</span><span class=”token operator”>></span> <ProgressBarAndroid <span class=”token operator”>/</span><span class=”token operator”>></span>
<br />
<<span class=”token operator”>/</span>DrawerLayoutAndroid<span class=”token operator”>></span>
<br />
<span class=”token punctuation”>)</span><span class=”token punctuation”>;</span>
<br />
<span class=”token punctuation”>}</span>
<br />
<span class=”token punctuation”>}</span>
import React<span class=“token punctuation”>,</span> <span class=“token punctuation”>{</span> Component<span class=“token punctuation”>,</span> DrawerLayoutAndroid<span class=“token punctuation”>,</span> ProgressBarAndroid<span class=“token punctuation”>,</span> Text <span class=“token punctuation”>}</span> from <span class=“token string”>‘react-native’</span><span class=“token punctuation”>;</span> class <span class=“token class-name”>App</span> extends <span class=“token class-name”>Component</span> <span class=“token punctuation”>{</span> <span class=“token function”>render<span class=“token punctuation”>(</span></span><span class=“token punctuation”>)</span> <span class=“token punctuation”>{</span> <span class=“token keyword”>return</span> <span class=“token punctuation”>(</span> <DrawerLayoutAndroid renderNavigationView<span class=“token operator”>=</span><span class=“token punctuation”>{</span><span class=“token punctuation”>(</span><span class=“token punctuation”>)</span> <span class=“token operator”>=</span><span class=“token operator”>></span> <Text<span class=“token operator”>></span>React Native<<span class=“token operator”>/</span>Text<span class=“token operator”>></span><span class=“token punctuation”>}</span><span class=“token operator”>></span> <ProgressBarAndroid <span class=“token operator”>/</span><span class=“token operator”>></span> <<span class=“token operator”>/</span>DrawerLayoutAndroid<span class=“token operator”>></span> <span class=“token punctuation”>)</span><span class=“token punctuation”>;</span> <span class=“token punctuation”>}</span> <span class=“token punctuation”>}</span> |
While these apps have different underlying components, Android having DrawerLayout and iOs have TabBarIos, the general structure of both apps look quite similar, even to a developer that isn’t familiar with React or mobile development! This is a major win as it not only allows developers to leverage roughly the same skill set for both apps, but it makes porting from one platform to another a much simpler affair. Instead of having to possibly — and quite likely — re-architect the app from scratch, the porting process will mostly entail swapping out one version of a component with another. The overall component hierarchy design will largely remain the same, though.
Companies left and right have been adopting React Native for their applications. It remains to be seen if React Native is a passing trend or the cross-platform solution many of us have been waiting for, but React Native is off to a great start so far!
Feature Image via Pixabay, licensed under cc0.
Source: InApps.net
Let’s create the next big thing together!
Coming together is a beginning. Keeping together is progress. Working together is success.