React Native

使用React构建原生移动应用的框架。一套代码,同时运行在iOS和Android平台。

2015发布年份
Facebook开发团队

核心特性

React Native 的设计哲学和关键技术特性

跨平台开发

一套代码,同时运行在iOS和Android平台。开发效率高,维护成本低。

跨平台iOSAndroid

原生性能

使用原生组件,性能接近原生应用。支持原生模块扩展。

原生组件高性能原生模块

热重载

支持热重载,修改代码后立即生效。开发体验流畅,效率高。

热重载开发体验效率

React生态

使用React语法和生态。Web开发者可快速上手,代码可复用。

ReactJSX生态

生态系统

围绕 React Native 构建的完整工具链

Expo

React Native开发工具链。提供开箱即用的开发环境,简化开发流程。

Expo开发工具简化

React Navigation

React Native导航库。支持栈导航、标签导航、抽屉导航等。

React Navigation导航路由

NativeBase

跨平台UI组件库。提供丰富的原生风格组件。

NativeBaseUI组件跨平台

React Native Paper

Material Design组件库。提供Material Design风格的UI组件。

React Native PaperMaterial DesignUI

状态管理

支持Redux、Zustand、MobX等状态管理库。与React生态完全兼容。

ReduxZustandMobX

测试工具

支持Jest、React Native Testing Library等测试工具。单元测试、组件测试。

JestTesting Library测试

快速入门

# 使用Expo创建项目
npx create-expo-app my-app
cd my-app

# 启动开发服务器
npx expo start

# 在模拟器中运行
# iOS: 按 i 键
# Android: 按 a 键

# 创建组件
import React from "react";
import { View, Text, StyleSheet, Button } from "react-native";

export default function App() {
    const [count, setCount] = React.useState(0);
    
    return (
        <View style={styles.container}>
            <Text style={styles.text}>Count: {count}</Text>
            <Button title="Increment" onPress={() => setCount(count + 1)} />
        </View>
    );
}

const styles = StyleSheet.create({
    container: {
        flex: 1,
        justifyContent: "center",
        alignItems: "center"
    },
    text: {
        fontSize: 24,
        marginBottom: 20
    }
});

配置示例

// React Native配置
// app.json
{
    "expo": {
        "name": "My App",
        "slug": "my-app",
        "version": "1.0.0",
        "orientation": "portrait",
        "icon": "./assets/icon.png",
        "userInterfaceStyle": "light",
        "splash": {
            "image": "./assets/splash.png",
            "resizeMode": "contain",
            "backgroundColor": "#ffffff"
        },
        "assetBundlePatterns": ["**/*"],
        "ios": {
            "supportsTablet": true,
            "bundleIdentifier": "com.myapp"
        },
        "android": {
            "adaptiveIcon": {
                "foregroundImage": "./assets/adaptive-icon.png",
                "backgroundColor": "#FFFFFF"
            },
            "package": "com.myapp"
        }
    }
}

// 依赖配置
// package.json
{
    "dependencies": {
        "expo": "~50.0.0",
        "react": "18.2.0",
        "react-native": "0.73.2",
        "@react-navigation/native": "^6.1.9",
        "@react-navigation/native-stack": "^6.9.17",
        "react-native-safe-area-context": "4.8.2",
        "react-native-screens": "~3.29.0"
    },
    "devDependencies": {
        "@babel/core": "^7.20.0",
        "@types/react": "~18.2.45",
        "typescript": "^5.1.3"
    }
}

学习资源

官方文档

全面的指南、API参考和教程。

reactnative.dev/docs →

React Native GitHub

源代码仓库,可查看源码和参与贡献。

github.com/facebook/react-native →

Expo文档

Expo开发工具链的完整文档。

docs.expo.dev →

React Native示例

官方示例项目和模板。

Examples →

与其他跨平台框架对比

vs Flutter

React Native使用JavaScript,Web开发者易上手。Flutter性能更好,UI一致性更强。

JavaScript性能UI一致性

vs Ionic

React Native使用原生组件,性能更好。Ionic使用WebView,开发更简单。

原生组件WebView性能

vs .NET MAUI

React Native使用JavaScript,生态更丰富。.NET MAUI使用C#,适合.NET开发者。

JavaScriptC#生态