【react】react Native

news/2025/2/27 9:25:44

目录

一、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.niftyadmin.cn/n/5869873.html

相关文章

0—QT ui界面一览

2025.2.26&#xff0c;感谢gpt4 1.控件盒子 1. Layouts&#xff08;布局&#xff09; 布局控件用于组织界面上的控件&#xff0c;确保它们的位置和排列方式合理。 Vertical Layout&#xff08;垂直布局&#xff09; &#xff1a;将控件按垂直方向排列。 建议&#xff1a;适…

逆向pyinstaller打包的exe软件,获取python源码(6)

在ailx10&#xff1a;逆向pyinstaller打包的exe软件&#xff0c;获取python源码(3)中&#xff0c;我们逆向出了主程序&#xff0c;但是对其依赖的其他python文件并没有给出逆向方法&#xff0c;实际上非常简单&#xff0c;在PYZ-00.pyz_extracted 文件夹中&#xff0c;只要逆向…

YOLOv8架构中的SAConv空洞卷积机制:性能优化与未来发展方向

文章目录 YOLOv8改进 | SAConv可切换空洞卷积1. 空洞卷积&#xff08;Dilated Convolution&#xff09;简介空洞卷积的优势&#xff1a; 2. SAConv可切换空洞卷积的提出SAConv的工作原理&#xff1a;SAConv的关键特性&#xff1a; 3. YOLOv8中SAConv的实现3.1 SAConv模块设计3.…

服务器迁移记录【腾讯云-->阿里云】

准备工作 压缩/root /usr/local/nginx /data三个目录到zip&#xff0c;并下载到本地。 zip root.zip /root zip nginx.zip /usr/local/nginx zip data.zip /datasz root.zip sz nginx.zip sz data.zip连接mysql数据库&#xff0c;导出数据库结构与数据到dzs_mysql.sql 安装l…

基于51单片机的智能家居温湿度监测系统proteus仿真

地址&#xff1a;https://pan.baidu.com/s/15WDwFiYXlWhavhMc0MAB2w 提取码&#xff1a;1234 仿真图&#xff1a; 芯片/模块的特点&#xff1a; AT89C52/AT89C51简介&#xff1a; AT89C52/AT89C51是一款经典的8位单片机&#xff0c;是意法半导体&#xff08;STMicroelectron…

JVM生产环境问题定位与解决实战(二):JConsole、VisualVM到MAT的高级应用

生产问题定位指南&#xff1a;几款必备的可视化工具 引言 在上一篇文章中&#xff0c;详细的介绍了JDK自带的一系列命令行工具&#xff0c;&#xff0c;如jps、jmap、jstat、jstack以及jcmd等&#xff0c;这些工具为排查和诊断Java虚拟机&#xff08;JVM&#xff09;问题提供…

在线VS离线TTS(语音合成芯片)有哪些优势-AIOT智能语音产品方案

离线 TTS 存在语音质量欠佳、音色选择有限、语言支持单一更新困难、占用资源多、适应性差、难以个性化定制等痛点 01更新维护困难 由于是离线模式&#xff0c;难以及时获取最新的语音数据和算法更新&#xff0c;无法得到持续改进。 02占用本地资源 需要在设备本地存储较大的…

【Spring】统一功能处理

目录 前言 拦截器 什么是拦截器&#xff1f; 拦截器的使用 自定义拦截器 注册并配置拦截器 拦截器详解 拦截路径 拦截器执行流程 适配器模式 统一数据返回格式 优点 统一异常处理 前言 在前面中&#xff0c;我们已经学习了spring中的一些常用操作&#xff0c;那么…