Skip to main content

What Is React Native

React Native is an open-source framework by Meta for building iOS and Android apps with React. The JavaScript code is not compiled into native code: it runs in a JS engine (Hermes) inside the app and tells the native side which real native views to create and update. One codebase covers both platforms, and platform-specific parts are written where needed.

Applies to: React Native 0.88, Expo SDK 58.

Details​

React vs React Native​

React for the webReact Native
Renders toDOM elements (div, span)Native views (View → UIView / android.view.View)
PrimitivesHTML tagsCore components: View, Text, Image, …
StylingCSS, cascade, classesJS objects, no cascade, Flexbox layout (Yoga)
TextText can go anywhereText only inside <Text>
NavigationURL and browser historyA library: React Navigation or Expo Router
RuntimeThe browser's JS engineHermes, bundled with the app
DeliveryDeploy to a server, users refreshStore builds with review; JS-only fixes via OTA updates
SharedComponents, hooks, state, contextThe same React: react is shared, only the renderer differs

React Native vs Flutter vs Native​

React NativeFlutterNative (Swift / Kotlin)
LanguageJavaScript / TypeScriptDartSwift, Kotlin
UIReal platform viewsDraws every pixel itself (Impeller engine)Real platform views
LookNative by defaultSame on both platforms unless adaptedNative
Code sharingiOS, Android, web (React Native Web)iOS, Android, web, desktopNone (two codebases)
Best fitTeams that know React, shared web logicCustom-designed UI, one look everywhereHeavy platform APIs, top performance

Expo vs Bare React Native​

Expo is the open-source framework the React Native docs recommend for new apps. It adds a set of native modules (expo-camera, expo-notifications, …), file-based routing (Expo Router), the dev tooling and prebuild. EAS (Build, Submit, Update) is a separate, optional cloud service by the same company (free tier and paid plans): many teams use Expo without it and build the generated native projects with Xcode, Gradle, fastlane or their own CI.

ApproachWhat it means
Expo (CNG)ios/ and android/ are generated by npx expo prebuild from app.json and config plugins; any native library can be used
Expo GoA prebuilt app for learning and first steps: one SDK version at a time, only its bundled native modules
Development buildYour own debug build with the dev tools, used instead of Expo Go once custom native code is needed
Bare (Community CLI)ios/ and android/ are committed and edited by hand; Expo modules can still be added

Follow-up Questions​

  • Is a React Native app slower than a native one? For typical screens the difference is small; it shows in long lists, heavy animations and startup. See Architecture and Performance.
  • What is Hermes? A JS engine built for React Native: it compiles JS to bytecode at build time, so the app starts faster and uses less memory. It is the default engine. See Architecture.
  • Can React Native share code with a web app? Business logic, hooks and state yes; UI only through React Native Web or Expo's web target.
  • Expo Router or React Navigation? See Navigation.
  • Why do the React Native docs recommend a framework? Core has no navigation, native API library or native dependency management; without a framework you build these yourself.
  • What is a config plugin? A function that changes the generated native projects during npx expo prebuild (Info.plist, AndroidManifest.xml, Gradle files); libraries ship one so that native setup lives in app.json instead of hand-edited ios/ and android/.
  • When do you need a new native build instead of an OTA update? When native code or native config changes: a new native library, permissions, the app icon, an SDK upgrade. See OTA Updates.

Common Mistakes​

  • Saying React Native renders in a WebView. That is Cordova or Ionic; React Native creates native views.
  • Saying JS is compiled to native code. It runs in Hermes; only the views are native.
  • Treating Expo as a limitation. With development builds and config plugins an Expo app can use any native library.

See Also​