React Native: What It Is and How to Use It
React Native is an open-source framework for building native apps for Android and iOS using React and JavaScript or TypeScript.2 Its key value proposition is code sharing: developers can write common application logic once and reuse it across platforms while still rendering real native UI components rather than web views. React Native is therefore best understood as a bridge between the React programming model and mobile platform capabilities.2
In practical terms, React Native lets developers define screens as components, manage state declaratively, and compose interfaces using core primitives such as View, Text, Image, TextInput, and list components.2 Layout is primarily handled with Flexbox; unlike CSS on the web, the default flex direction in React Native is column.2
React Native has evolved substantially. Historically, JavaScript and native code communicated through an asynchronous bridge. In the newer architecture, React Native replaces major internals with systems such as Fabric and TurboModules, improving rendering, scheduling, startup behavior, and native interoperability.2 React Native also supports Hermes for improved startup performance by compiling JavaScript to Hermes bytecode during builds.2
A modern beginner workflow usually starts with Expo because the React Native documentation explicitly recommends using a framework, and Expo provides project scaffolding, routing, native libraries, and development tooling for production-ready apps.2
Footnotes
-
Introduction · React Native - Official introduction to React Native documentation and learning path. ↩ ↩2 ↩3
-
Get Started with React Native · React Native - Official guidance on using React Native and recommendation to start with a framework such as Expo. ↩ ↩2 ↩3 ↩4
-
New Architecture is here - React Native - Official explanation of the old bridge model and the newer architecture. ↩ ↩2 ↩3 ↩4
-
React Fundamentals · React Native - Official explanation of components, JSX, props, and state in the React Native context. ↩
-
Layout Props · React Native - Official reference for layout properties such as
flexDirection,gap, and sizing behavior. ↩ ↩2 -
Layout with Flexbox · React Native - Official guide to Flexbox layout in React Native. ↩
-
An update on the New Architecture Rollout · React Native - Overview of Fabric, TurboModules, and migration concepts. ↩
-
Using Hermes - React Native - Official documentation on Hermes and build-time bytecode compilation. ↩
-
Meet Hermes, a new JavaScript Engine optimized for React Native · React Native - Official background on Hermes and its mobile performance goals. ↩
-
Create a project - Expo Documentation - Official Expo project creation guidance and system requirements. ↩
React Native Beginner Tutorial
Core Idea
React Native does not render HTML in a browser view. It maps React components to platform-native views and APIs.2
Footnotes
-
Get Started with React Native · React Native - Official guidance on using React Native and recommendation to start with a framework such as Expo. ↩
-
New Architecture is here - React Native - Official explanation of the old bridge model and the newer architecture. ↩
Why React Native Is Widely Used
React Native is attractive because it combines a familiar React development model with native app delivery. A single codebase can often support Android and iOS, reducing duplicated effort for business logic, state management, API access, and many UI patterns.2 At the same time, native developers can integrate platform-specific code when needed, which makes React Native suitable for both cross-platform and hybrid-native architectures.2
Typical use cases include:
- Consumer mobile apps with shared Android and iOS features
- Internal enterprise tools
- MVPs and prototypes that need fast iteration
- Apps that require some native integrations but not full platform duplication
- Universal projects when using Expo tooling that can also target web in some workflows2
However, React Native is not a perfect fit for every case. Extremely platform-specialized interfaces, heavy custom graphics pipelines, or advanced real-time native workloads may require more platform-specific engineering. In such cases, React Native can still be used selectively, but teams should evaluate the trade-off between code sharing and low-level control.2
| Aspect | React Native Strength | Limitation / Consideration |
|---|---|---|
| Code reuse | Shared logic across Android and iOS | Some platform-specific code is still needed |
| UI model | Declarative React components | Must learn mobile-specific APIs and constraints |
| Ecosystem | Strong library and Expo support2 | Library compatibility varies by architecture |
| Performance | Native UI, Hermes, newer architecture2 | Poor list handling or heavy JS work can still cause dropped frames |
| Onboarding | Fast setup with Expo2 | Native toolchains may still be required later |
Footnotes
-
Get Started with React Native · React Native - Official guidance on using React Native and recommendation to start with a framework such as Expo. ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7
-
Create a project - Expo Documentation - Official Expo project creation guidance and system requirements. ↩ ↩2 ↩3 ↩4
-
New Architecture is here - React Native - Official explanation of the old bridge model and the newer architecture. ↩ ↩2 ↩3
-
Create your first app - Expo Documentation - Official step-by-step tutorial for initializing and editing a first Expo app. ↩
-
React Fundamentals · React Native - Official explanation of components, JSX, props, and state in the React Native context. ↩
-
Using Hermes - React Native - Official documentation on Hermes and build-time bytecode compilation. ↩
-
Performance Overview · React Native - Official performance guidance on frame rates, JS thread behavior, and common bottlenecks. ↩
How a React Native Project Typically Evolves
Project Creation
Stage 1Create a project with create-expo-app, which Expo recommends as the easiest entry point for new React Native applications.2"
Footnotes
-
Create a project - Expo Documentation - Official Expo project creation guidance and system requirements. ↩
-
Create your first app - Expo Documentation - Official step-by-step tutorial for initializing and editing a first Expo app. ↩
UI Construction
Stage 2Build screens using core components such as View, Text, Image, and TextInput, then style them with Flexbox and style props.3"
Footnotes
-
React Fundamentals · React Native - Official explanation of components, JSX, props, and state in the React Native context. ↩
-
Layout Props · React Native - Official reference for layout properties such as
flexDirection,gap, and sizing behavior. ↩ -
Layout with Flexbox · React Native - Official guide to Flexbox layout in React Native. ↩
Navigation
Stage 3Add navigation, commonly with Expo Router in Expo projects, which uses file-based routing and integrates with React Native navigation patterns.2"
Footnotes
-
Navigation in Expo and React Native apps - Expo Documentation - Official overview of navigation options and recommendation of Expo Router for Expo projects. ↩
-
Core concepts of file-based routing in Expo Router - Expo Documentation - Official explanation of file-based routing and route conventions. ↩
Native Features
Stage 4Integrate device capabilities and native modules, either through Expo libraries or custom native code when needed.3"
Footnotes
-
Get Started with React Native · React Native - Official guidance on using React Native and recommendation to start with a framework such as Expo. ↩
-
New Architecture is here - React Native - Official explanation of the old bridge model and the newer architecture. ↩
-
Create a project - Expo Documentation - Official Expo project creation guidance and system requirements. ↩
Optimization and Release
Stage 5Use production builds, Hermes, and list/performance optimizations before shipping to app stores.3"
Footnotes
-
Performance Overview · React Native - Official performance guidance on frame rates, JS thread behavior, and common bottlenecks. ↩
-
Using Hermes - React Native - Official documentation on Hermes and build-time bytecode compilation. ↩
-
Meet Hermes, a new JavaScript Engine optimized for React Native · React Native - Official background on Hermes and its mobile performance goals. ↩
Core Building Blocks You Must Learn
To use React Native effectively, you need to understand both React concepts and mobile-specific primitives.
1. Components and JSX
A React Native app is a hierarchy of components written with JSX. Components may be functional components that return UI based on props and state.
2. Props and State
Props pass data into child components, while state stores data that changes over time and triggers rerenders.
3. Core Components
React Native provides core UI elements such as:
Viewfor containers and layoutTextfor text renderingImagefor imagesTextInputfor user inputFlatListfor large scrolling lists3
4. Styling and Layout
Styles are JavaScript objects rather than CSS files. React Native supports many familiar style properties, but layout is optimized for mobile and primarily uses Flexbox.2 Important rules include:
- default
flexDirectioniscolumn - pixel-based
gapis supported - width and height can use pixels or percentages
5. Navigation
React Native core does not include a complete navigation system; navigation is generally added through libraries. For Expo projects, Expo Router is recommended and uses file-based routing, where files inside the app or src/app directory become routes.2
Footnotes
-
React Fundamentals · React Native - Official explanation of components, JSX, props, and state in the React Native context. ↩ ↩2 ↩3 ↩4 ↩5
-
Layout with Flexbox · React Native - Official guide to Flexbox layout in React Native. ↩ ↩2 ↩3
-
Performance Overview · React Native - Official performance guidance on frame rates, JS thread behavior, and common bottlenecks. ↩
-
Layout Props · React Native - Official reference for layout properties such as
flexDirection,gap, and sizing behavior. ↩ ↩2 ↩3 -
Navigation in Expo and React Native apps - Expo Documentation - Official overview of navigation options and recommendation of Expo Router for Expo projects. ↩ ↩2
-
Core concepts of file-based routing in Expo Router - Expo Documentation - Official explanation of file-based routing and route conventions. ↩
Best Starting Path
If you are new to React Native, begin with Expo. The React Native docs state that most developers benefit from using a framework such as Expo for production-ready tooling and APIs.2
Footnotes
-
Get Started with React Native · React Native - Official guidance on using React Native and recommendation to start with a framework such as Expo. ↩
-
Create a project - Expo Documentation - Official Expo project creation guidance and system requirements. ↩
How to Start Using React Native with Expo
- 1Step 1
Install Node.js LTS, a code editor, and ensure you have a terminal available on macOS, Windows, or Linux as described in Expo's getting-started materials.2
Footnotes
-
Create a project - Expo Documentation - Official Expo project creation guidance and system requirements. ↩
-
Create your first app - Expo Documentation - Official step-by-step tutorial for initializing and editing a first Expo app. ↩
-
- 2Step 2
Run
npx create-expo-appto scaffold a new project. Expo documents this as the standard way to initialize a React Native application with recommended defaults.2Footnotes
-
Create a project - Expo Documentation - Official Expo project creation guidance and system requirements. ↩
-
Create your first app - Expo Documentation - Official step-by-step tutorial for initializing and editing a first Expo app. ↩
-
- 3Step 3
Change into the project directory and open it in your editor. The default template includes a working React Native project and commonly includes Expo Router in current default templates.2
Footnotes
-
Create a project - Expo Documentation - Official Expo project creation guidance and system requirements. ↩
-
Navigation in Expo and React Native apps - Expo Documentation - Official overview of navigation options and recommendation of Expo Router for Expo projects. ↩
-
- 4Step 4
Start the app with Expo tooling so you can open it in Expo Go, a simulator, or an emulator. Expo describes this as the easiest way to experiment and prototype quickly.
Footnotes
-
Develop an app with Expo - Expo Documentation - Official overview of Expo development builds, prebuild, and the core development loop. ↩
-
- 5Step 5
Modify the starter component to render
ViewandTextelements. React Native documentation emphasizes beginning with core components and simple interactive examples.2Footnotes
-
Introduction · React Native - Official introduction to React Native documentation and learning path. ↩
-
React Fundamentals · React Native - Official explanation of components, JSX, props, and state in the React Native context. ↩
-
- 6Step 6
Create route files inside the app directory when using Expo Router. Files become screens automatically, and the root layout defines shared UI such as headers or tabs.2
Footnotes
-
Navigation in Expo and React Native apps - Expo Documentation - Official overview of navigation options and recommendation of Expo Router for Expo projects. ↩
-
Core concepts of file-based routing in Expo Router - Expo Documentation - Official explanation of file-based routing and route conventions. ↩
-
- 7Step 7
Use Expo libraries or native modules for device features. If your app later needs direct native customization, Expo can generate native projects using
npx expo prebuild.Footnotes
-
Develop an app with Expo - Expo Documentation - Official overview of Expo development builds, prebuild, and the core development loop. ↩
-
- 8Step 8
Validate behavior on Android and iOS, then measure performance in release mode because development mode does not represent production performance accurately.2
Footnotes
-
Performance Overview · React Native - Official performance guidance on frame rates, JS thread behavior, and common bottlenecks. ↩
-
Using Hermes - React Native - Official documentation on Hermes and build-time bytecode compilation. ↩
-
1import React from 'react'; 2import { View, Text, StyleSheet } from 'react-native'; 3 4export default function App() { 5 return ( 6 <View style={styles.container}> 7 <Text style={styles.title}>Hello React Native</Text> 8 <Text>This screen is rendered with native components.</Text> 9 </View> 10 ); 11} 12 13const styles = StyleSheet.create({ 14 container: { 15 flex: 1, 16 justifyContent: 'center', 17 alignItems: 'center', 18 padding: 24, 19 }, 20 title: { 21 fontSize: 24, 22 fontWeight: 'bold', 23 marginBottom: 12, 24 }, 25});
How Navigation Works in Real Projects
A real application quickly grows beyond a single screen, so navigation becomes essential. React Native core intentionally excludes a full navigation solution; this is delegated to community and framework libraries. In Expo projects, Expo Router is recommended because it converts files into routes, supports typed routes, deep linking, and uses React Navigation underneath.2
For example:
app/index.tsxbecomes the initial routeapp/home.tsxmaps to/homeapp/_layout.tsxdefines shared layout and navigation structure
This file-based model simplifies project organization and aligns mobile navigation with web-style route conventions.2
Footnotes
-
Navigation in Expo and React Native apps - Expo Documentation - Official overview of navigation options and recommendation of Expo Router for Expo projects. ↩ ↩2 ↩3
-
Core concepts of file-based routing in Expo Router - Expo Documentation - Official explanation of file-based routing and route conventions. ↩ ↩2 ↩3 ↩4 ↩5
Relative Learning Focus for Beginners
A conceptual distribution of early study effort when starting React Native.
Performance, Architecture, and Practical Constraints
React Native performance depends on both JavaScript execution and UI rendering. The official performance guidance distinguishes between the JavaScript thread and the main UI thread; expensive work on the JavaScript side can cause dropped frames and visibly frozen interactions. This is why list rendering, large rerenders, and heavy synchronous calculations must be handled carefully.
For large lists, FlatList is the standard high-level component, and performance can often be improved by:
- using
getItemLayoutwhen item sizes are predictable - avoiding anonymous
renderItemfunctions - tuning
maxToRenderPerBatch,windowSize, and related virtualization settings - using lighter row components and memoization
Hermes can improve startup characteristics because React Native can compile JavaScript to Hermes bytecode at build time. Meanwhile, the new architecture modernizes how React Native renders and communicates with native layers, replacing the older asynchronous bridge model with more direct systems such as Fabric and TurboModules.2 Conceptually, this reduces architectural overhead and enables better interoperability and rendering behavior.
A simplified performance principle is:
This is not an official React Native formula, but it captures the engineering intuition behind the official guidance: responsiveness improves when you minimize heavy work in performance-critical paths.
Footnotes
-
Performance Overview · React Native - Official performance guidance on frame rates, JS thread behavior, and common bottlenecks. ↩ ↩2 ↩3 ↩4
-
Using Hermes - React Native - Official documentation on Hermes and build-time bytecode compilation. ↩ ↩2 ↩3 ↩4
-
New Architecture is here - React Native - Official explanation of the old bridge model and the newer architecture. ↩ ↩2
-
An update on the New Architecture Rollout · React Native - Overview of Fabric, TurboModules, and migration concepts. ↩
Common Questions and Practical Clarifications
Important Limitation
Do not judge app speed only from development builds. React Native's official performance guidance notes that development mode can significantly affect responsiveness and frame rate.
Footnotes
-
Performance Overview · React Native - Official performance guidance on frame rates, JS thread behavior, and common bottlenecks. ↩
A Minimal Mental Model for Using React Native Well
To use React Native effectively, think in layers:
- React layer: components, props, state, events, and rerendering.
- React Native layer: mobile UI primitives, styling, layout, gestures, lists, and platform APIs.3
- Project tooling layer: Expo, routing, build systems, simulators, and native configuration.3
- Optimization layer: Hermes, release builds, list virtualization, and architecture-aware library choices.3
If you master these layers in order, the learning path becomes much more manageable. Start by building a simple screen, add input, introduce navigation, connect data, and only then move into advanced native modules or architecture topics.
A sensible progression is:
- learn React fundamentals
- learn core components and Flexbox2
- create an Expo project2
- add Expo Router navigation2
- test on devices and optimize2
This approach matches the official ecosystem guidance and avoids unnecessary complexity at the start.2
Footnotes
-
React Fundamentals · React Native - Official explanation of components, JSX, props, and state in the React Native context. ↩ ↩2
-
Layout Props · React Native - Official reference for layout properties such as
flexDirection,gap, and sizing behavior. ↩ ↩2 -
Layout with Flexbox · React Native - Official guide to Flexbox layout in React Native. ↩ ↩2
-
Performance Overview · React Native - Official performance guidance on frame rates, JS thread behavior, and common bottlenecks. ↩ ↩2 ↩3
-
Create a project - Expo Documentation - Official Expo project creation guidance and system requirements. ↩ ↩2 ↩3
-
Navigation in Expo and React Native apps - Expo Documentation - Official overview of navigation options and recommendation of Expo Router for Expo projects. ↩ ↩2
-
Develop an app with Expo - Expo Documentation - Official overview of Expo development builds, prebuild, and the core development loop. ↩
-
New Architecture is here - React Native - Official explanation of the old bridge model and the newer architecture. ↩
-
Using Hermes - React Native - Official documentation on Hermes and build-time bytecode compilation. ↩ ↩2
-
Create your first app - Expo Documentation - Official step-by-step tutorial for initializing and editing a first Expo app. ↩
-
Core concepts of file-based routing in Expo Router - Expo Documentation - Official explanation of file-based routing and route conventions. ↩
-
Get Started with React Native · React Native - Official guidance on using React Native and recommendation to start with a framework such as Expo. ↩
Knowledge Check
What best describes React Native?
Explore Related Topics
Next.js Roadmap: From Foundations to Mastery
Next.js has evolved from a simple React framework into a comprehensive full-stack web development platform. As of Next.js 16 (released October 2025), it ships with a stable Turbopack bundler, Cache Components, React 19.2 support, and a dramatically improved developer experience. Whether you are a fr
Learn React in 30 Days: A Comprehensive Course
Learn React in 30 Days: From Zero to Production
React Hooks in Depth
This course explains React Hooks, the functional alternative to class components, covering core hooks, usage rules, performance optimizations, and how to create custom hooks.
useStateanduseEffectreplace class state and lifecycle methods; the dependency array controls when effects run.- Hooks must be called at the top level of React function components or custom hooks, and the ESLint plugin enforces these rules.
useMemomemoizes values anduseCallbackmemoizes functions, both improving performance for expensive calculations or stable callbacks.useReduceris preferred for complex state logic, following a reducer pattern similar to Redux.- Building a custom hook involves extracting reusable
useState/useEffectlogic into a function whose name starts with “use”.