React Native – Introduction

June 10, 20265 min readUpdated 8/24/2026

React Native lets you build an iOS and Android app with React. Not a web page wrapped in an app icon — the buttons and lists on screen are the real native ones the platform ships, driven by JavaScript you write.

That distinction is the whole point, and it is the first thing to get straight.

What it actually is

You write components. React reconciles them exactly as it does on the web. But instead of producing DOM nodes, the renderer creates native views — a UIView on iOS, an Android View on Android. Your JavaScript runs in a separate engine (Hermes) and tells the platform what to draw.

So a <Text> is not a styled <span>. There is no DOM, no CSS, no document, and no browser. Scrolling, text selection and the keyboard are the platform's, which is why a React Native app feels right in a way a web view never quite does.

How it compares

Against React on the web: the component model, hooks, context and state are identical. What changes is everything underneath — the components, the styling system, navigation, storage, and a set of constraints the web does not have. Roughly: you keep your React, and relearn the platform.

Against Flutter: Flutter draws its own widgets on a canvas and ships a rendering engine. That gives it pixel-identical output everywhere; React Native gives you the real platform controls and the JavaScript ecosystem. Neither is the right answer in general.

Against writing Swift and Kotlin twice: you trade some performance ceiling and some access to brand-new platform features for one codebase and a much faster loop. For most applications that is an easy trade. For a game, a video editor or something leaning hard on the GPU, it is not.

When not to use it

Honest answer, because tutorials rarely give one. Skip React Native if your app is mostly heavy graphics or sustained computation; if it depends on a platform feature the day it ships; or if your team is already two competent native teams and has no JavaScript practice. It is also a poor fit for something that is genuinely a website — a responsive site is cheaper and reaches everyone.

Expo, or bare React Native

You will hit this choice immediately, and the received wisdom is out of date.

Bare React Native gives you the ios/ and android/ projects and you manage them. Expo is a set of libraries and a build system on top of React Native that manages those projects for you, generating them from configuration.

The old objection — "Expo cannot use native modules" — has not been true for years. A development build is a real app binary containing whatever native code you need. This track uses Expo throughout, and the demo app links Stripe's native SDK.

What survives of the objection is worth keeping: Expo Go, the pre-built sandbox app, contains a fixed set of native modules and cannot load anything else. That trips up nearly everyone. Lesson 2 draws the line properly.

Versions this track is written against

Every example comes from a real application pinned to these. When they move, expect small differences:

    "@stripe/stripe-react-native": "0.64.0",
    "expo": "~57.0.16",
...
    "expo-router": "~57.0.16",
...
    "react": "19.2.3",
    "react-dom": "19.2.3",
    "react-native": "0.86.2",

Plus TypeScript 6 and Node 22. One requirement catches people out: React Native 0.86 needs Xcode 16.1 or newer to build for iOS, and a simulator runtime actually installed — a fresh Xcode often has none, and the error it produces points nowhere useful.

The application every example comes from

This track does not invent snippets. Almost every block of code in it is copied from a working pizza-ordering app: a menu, a pizza builder that prices as you tap, a cart that survives the app being force-quit, guest checkout, Stripe payments, order history, and a profile with saved addresses and cards.

It is Expo SDK 57 with expo-router, React Context for state, and Stripe's PaymentSheet behind a platform-split module. It has 193 Jest tests and 31 end-to-end tests.

The same application also exists in React and in Angular against the same backend, which is where the "here is what the web does about this" asides throughout the track come from. They are comparisons between real implementations, not between React Native and a remembered impression of something else.

⚠️ One honest caveat. The app was verified through Jest, an end-to-end suite and the live API, but it has not yet been run on a physical device — the machine it was built on could not build for the simulator. Lessons that describe the native build say so where it matters.

What you should know first

React, comfortably: components, props, state, useState, useEffect and why keys matter in a list. If you have written a React web app, you are ready.

TypeScript helps and is not a prerequisite. The snippets are typed because the app is, but the ideas do not depend on it.

You do not need Swift or Kotlin. Two lessons touch the native projects, and both explain what they are doing.

The lessons

In order. Each builds on the one before, and the first two are short.

Getting started

  1. Introduction
  2. Set Up a Project with Expo
  3. Core Components
  4. Styling and a Design System
  5. Flexbox and Layout

Layout and UI

  1. Safe Areas, Notches and the Keyboard
  2. Lists with FlatList
  3. TextInput and Forms
  4. Modals, Sheets and Overlays
  5. Animations and the Native Driver
  1. Navigation
  2. Deep Linking and the URL as State

Architecture

  1. Structuring a Real App
  2. State: Context, Reducers and Custom Hooks
  3. Talking to an API
  4. Storing Data on the Device

Platform and native

  1. Platform APIs and Device Differences
  2. Native Modules and Config Plugins
  3. Taking Payments with Stripe
  4. Accessibility

Quality and shipping

  1. Performance
  2. Error Boundaries and Failure States
  3. Testing
  4. Internals: Hermes, JSI and the New Architecture
  5. Building and Releasing to the App Stores

Start here

Set Up a Project with Expo — one command, what it generates, and the Expo Go trap.