当前位置: 首页 > article >正文

【react】react Native


目录

一、React Native 简介

二、环境搭建

1. 开发环境配置(以 macOS 为例)

2. 创建 React Native 项目

三、核心概念与组件

1. React Native 基础组件

2. 样式与布局

3. 导航(React Navigation)

3. 热重载与快速刷新

五、与原生模块交互

1. 调用原生功能(如相机)

2. 自定义原生模块

六、状态管理

1. 使用 React Context

2. 集成 Redux Toolkit

七、性能优化

八、发布应用

1. Android

2. iOS

九、学习资源

本文用的是TypeScript

一、React Native 简介

什么是 React Native

        由 Facebook 推出的跨平台移动应用开发框架,使用 JavaScript/TypeScript 和 React 语法,可生成 iOS 和 Android 原生应用。

        核心特性:一次编写,多端运行热重载(Hot Reload)原生性能

        与 React 的关系:基于 React 设计思想,但将虚拟 DOM 映射到原生组件(如 View 对应 UIView/Android View)。

适用场景

        开发中低复杂度的跨平台应用(如社交、电商、工具类 App)。

        快速原型开发或需要频繁迭代的 MVP(最小可行产品)。

React Native vs Flutter vs 原生开发

特性React NativeFlutter原生开发(Java/Swift)
语言JavaScript/TypeScriptDartJava/Kotlin/Swift
性能接近原生接近原生最佳
生态丰富(NPM 包支持)快速增长原生 SDK
学习曲线低(React 开发者友好)中等

二、环境搭建

1. 开发环境配置(以 macOS 为例)
Node.js 和 Watchman(文件监控工具):
brew install node watchman
iOS 开发依赖

Xcode(App Store 下载)。

安装 CocoaPods(依赖管理):

sudo gem install cocoapods
Android 开发依赖

JDK 11+。

Android Studio(安装 SDK 和模拟器)。

配置环境变量(ANDROID_HOME)。

2. 创建 React Native 项目

使用官方脚手架

npx react-native init MyApp --template react-native-template-typescript

项目结构

MyApp/
  android/    # Android 原生代码
  ios/        # iOS 原生代码
  src/        # 业务代码(推荐)
    components/
    screens/
    App.tsx
  index.js    # 入口文件

三、核心概念与组件

1. React Native 基础组件
视图容器
import { View, Text, StyleSheet } from 'react-native';
const App = () => (
  <View style={styles.container}>
    <Text style={styles.text}>Hello React Native!</Text>
  </View>
);
const styles = StyleSheet.create({
  container: { flex: 1, justifyContent: 'center', alignItems: 'center' },
  text: { fontSize: 20 }
});
常用组件

Text:显示文本。

Image:加载图片(本地或网络)。

ScrollView:可滚动视图。

FlatList:高性能列表。

Button / TouchableOpacity:交互按钮。

2. 样式与布局

Flexbox 布局(与 Web 类似,但默认 flexDirection: 'column'):

<View style={{ flex: 1, flexDirection: 'row', justifyContent: 'space-between' }}>
  <Text>Left</Text>
  <Text>Right</Text>
</View>

平台特定样式

import { Platform } from 'react-native';
const styles = StyleSheet.create({
  box: {
    padding: Platform.OS === 'ios' ? 20 : 10,
    ...Platform.select({ android: { backgroundColor: 'blue' } })
  }
});
3. 导航(React Navigation)

安装与配置

npm install @react-navigation/native @react-navigation/native-stack
npm install react-native-screens react-native-safe-area-context

基础导航示例

import { NavigationContainer } from '@react-navigation/native';
import { createNativeStackNavigator } from '@react-navigation/native-stack';

const Stack = createNativeStackNavigator();
const App = () => (
  <NavigationContainer>
    <Stack.Navigator>
      <Stack.Screen name="Home" component={HomeScreen} />
      <Stack.Screen name="Details" component={DetailsScreen} />
    </Stack.Navigator>
  </NavigationContainer>
);

React DevTools:调试组件树和状态。

npm install -g react-devtools
react-devtools

Flipper:集成日志、网络请求、数据库查看。

下载 Flipper,启动后连接设备或模拟器。

3. 热重载与快速刷新

修改代码后自动刷新界面(无需重新编译)。

五、与原生模块交互

1. 调用原生功能(如相机)

使用社区库(如 react-native-camera):

npm install react-native-camera
cd ios && pod install

示例代码

import { RNCamera } from 'react-native-camera';
const CameraScreen = () => (
  <RNCamera style={{ flex: 1 }} captureAudio={false}>
    <Button title="拍照" onPress={() => {/* 拍照逻辑 */}} />
  </RNCamera>
);
2. 自定义原生模块

Android(Java)

// MyModule.java
public class MyModule extends ReactContextBaseJavaModule {
  @ReactMethod
  public void showToast(String message) {
    Toast.makeText(getReactApplicationContext(), message, Toast.LENGTH_SHORT).show();
  }
}

iOS(Objective-C)

// MyModule.m
RCT_EXPORT_METHOD(showToast:(NSString *)message) {
  dispatch_async(dispatch_get_main_queue(), ^{
    UIAlertController *alert = [UIAlertController alertControllerWithTitle:nil message:message preferredStyle:UIAlertControllerStyleAlert];
    [self presentViewController:alert animated:YES completion:nil];
  });
}

六、状态管理

1. 使用 React Context

创建全局状态

import React, { createContext, useContext, useState } from 'react';
type Theme = 'light' | 'dark';
const ThemeContext = createContext<{
  theme: Theme;
  toggleTheme: () => void;
} | null>(null);

export const ThemeProvider = ({ children }: { children: React.ReactNode }) => {
  const [theme, setTheme] = useState<Theme>('light');
  const toggleTheme = () => setTheme(prev => prev === 'light' ? 'dark' : 'light');
  return (
    <ThemeContext.Provider value={{ theme, toggleTheme }}>
      {children}
    </ThemeContext.Provider>
  );
};
2. 集成 Redux Toolkit

安装与配置

npm install @reduxjs/toolkit react- redux

创建 Store

// store.ts
import { configureStore } from '@reduxjs/toolkit';
const store = configureStore({ reducer: rootReducer });
export type RootState = ReturnType<typeof store.getState>;
export type AppDispatch = typeof store.dispatch;

在组件中使用

import { useSelector, useDispatch } from 'react-redux';
const Counter = () => {
  const count = useSelector((state: RootState) => state.counter.value);
  const dispatch = useDispatch();
  return <Button title="+" onPress={() => dispatch(increment())} />;
};

七、性能优化

        1. 避免不必要的渲染

        使用 React.memo 或 useMemo/useCallback

        2. 列表优化

        使用 FlatList 替代 ScrollView + map

        3. 图片优化

        压缩图片,使用 resizeMode 控制缩放。

        4. 减少 Bridge 通信

        避免频繁调用原生模块。

八、发布应用

1. Android

生成签名 APK:

cd android && ./gradlew bundleRelease # 生成 .aab 文件(Google Play)
./gradlew assembleRelease # 生成 .apk 文件
2. iOS

通过 Xcode 打包(Product → Archive),上传至 App Store Connect。

九、学习资源

官方文档

React Native 官方文档

社区资源

Expo(快速开发工具链)

React Native Elements(UI 库)

实战项目

开发一个天气预报 App(集成 API、导航、状态管理)。

通过以上内容,你可以快速上手 React Native 开发,逐步构建跨平台移动应用!🚀

码字不易,各位大佬 点点赞呗


http://www.kler.cn/a/563272.html

相关文章:

  • [免单统计]
  • 使用前端 html css 和js 开发一个AI智能平台官网模板-前端静态页面项目
  • 机器学习数学基础:34.克隆巴赫α系数
  • 热更新-arthas + jenkins/Bshell实现
  • 免费PDF工具
  • 【iOS】小蓝书学习(四)
  • Qwen2.5-VL技术报告:多模态大模型的新SOTA!视觉理解能力全面超越GPT-4o
  • 公共数据授权运营模式研究(总体框架、主要模式及发展趋势)
  • 解锁C# XML编程:从新手到实战高手的蜕变之路
  • 【学习方法】学习软件专业课程的思考方式
  • SpringBoot文件上传实战:存储架构设计与服务器空间优化
  • 游戏引擎学习第124天
  • mysql.gtid_executed表、gtid_executed变量、gtid_purged变量的修改时机
  • 【算法系列】归并排序详解
  • nss刷题5(misc)
  • 【目标检测旋转框xml2txt】rolabelimg标注的xml格式label转YOLO格式txt文件
  • CSS3 圆角:实现与优化指南
  • Python 3 实用工具库
  • C++ 中的 char[] 和 char*
  • spring boot 连接FTP实现文件上传