ReactNative开发技能Skill ReactNativeDevelopment

React Native 开发技能是一个专注于跨平台移动应用开发的工具集。它深度集成 React Native 生态系统,提供从项目初始化、组件开发、状态管理、导航配置到性能优化、测试和调试的全套解决方案。适用于使用 JavaScript/TypeScript 构建高性能 iOS 和 Android 应用的开发者。关键词:React Native, 跨平台开发, 移动应用, JavaScript, TypeScript, 原生模块, 性能优化, 状态管理, 导航, 测试。

移动开发 0 次安装 7 次浏览 更新于 2/25/2026

名称: React Native 开发 描述: 深度集成 React Native 生态系统,用于跨平台移动开发 版本: 1.0.0 类别: 跨平台开发 标识: react-native-dev 状态: 活跃

React Native 开发技能

概述

此技能提供与 React Native 生态系统的深度集成,用于跨平台移动开发。它支持执行 React Native CLI 命令、组件生成、构建优化以及全面的调试功能。

允许使用的工具

  • bash - 执行 React Native CLI、Expo CLI 和 npm/yarn 命令
  • read - 分析 React Native 项目文件、配置和组件
  • write - 生成和修改 React Native 组件及配置
  • edit - 更新现有的 React Native 代码和配置
  • glob - 搜索 React Native 组件和配置文件
  • grep - 在 React Native 代码库中搜索模式

核心能力

核心开发

  1. React Native CLI 操作

    • 初始化新的 React Native 项目
    • 使用自定义配置运行 Metro 打包器
    • 执行特定平台构建(iOS/Android)
    • 链接原生依赖项
    • 生成原生代码桥接
  2. Expo CLI 操作

    • 创建和管理 Expo 项目
    • 配置 EAS Build 和 EAS Submit
    • 管理 Expo 配置插件
    • 处理空中更新
    • 为裸工作流退出进行预构建
  3. 组件生成

    • 生成基于 TypeScript 的函数式组件
    • 创建具有正确类型的自定义钩子
    • 实现 React Navigation 屏幕和导航器
    • 构建可复用的 UI 组件库
    • 为组件生成 Storybook 故事

状态管理

  1. Redux Toolkit 集成

    • 使用 createSlice 生成 Redux 切片
    • 为 API 缓存配置 RTK Query
    • 实现具有正确类型的异步 thunks
    • 设置 Redux DevTools 集成
    • 使用 createSelector 创建选择器
  2. Zustand/Jotai/Recoil

    • 配置轻量级状态存储
    • 实现原子状态模式
    • 设置持久化中间件
    • 创建派生状态计算

导航

  1. React Navigation
    • 配置堆栈、标签页和抽屉导航器
    • 使用 TypeScript 实现类型安全的导航
    • 设置深度链接配置
    • 处理身份验证流程
    • 实现嵌套导航模式

性能

  1. 性能优化

    • 配置 Hermes JavaScript 引擎
    • 实现 FlatList/FlashList 优化
    • 设置 React Native Performance 监控
    • 分析和修复重新渲染问题
    • 实现懒加载和代码分割
  2. 原生模块集成

    • 配置 TurboModules 和 JSI
    • 桥接原生代码(Objective-C/Swift/Java/Kotlin)
    • 为原生模块设置 Codegen
    • 调试原生崩溃和问题

测试

  1. 测试配置
    • 使用 React Native 预设配置 Jest
    • 设置 React Native Testing Library
    • 实现组件快照测试
    • 为 E2E 测试配置 Detox
    • 有效模拟原生模块

调试

  1. 调试工具
    • 配置 Flipper 插件
    • 设置 Reactotron 集成
    • 使用 React DevTools 进行组件检查
    • 调试网络请求
    • 分析 JavaScript 性能

目标流程

此技能与以下流程集成:

  • react-native-app-setup.js - 项目初始化和配置
  • cross-platform-ui-library.js - 共享组件开发
  • mobile-testing-strategy.js - 测试实施和覆盖率
  • mobile-performance-optimization.js - 性能调优

依赖项

必需

  • Node.js 18+
  • npm 或 yarn 包管理器
  • React Native CLI (npx react-native)
  • Watchman (macOS)

可选

  • Expo CLI (npx expo)
  • 带有 Android SDK 的 Android Studio
  • Xcode (仅限 macOS)
  • Flipper
  • Reactotron

配置

项目结构

项目根目录/
├── src/
│   ├── components/ 组件
│   ├── screens/ 屏幕
│   ├── navigation/ 导航
│   ├── store/ 状态管理
│   ├── hooks/ 钩子
│   ├── services/ 服务
│   ├── utils/ 工具
│   └── types/ 类型
├── __tests__/ 测试
├── android/ Android
├── ios/ iOS
├── metro.config.js
├── babel.config.js
├── tsconfig.json
└── package.json

Metro 配置

// metro.config.js
const { getDefaultConfig, mergeConfig } = require('@react-native/metro-config');

const config = {
  transformer: {
    getTransformOptions: async () => ({
      transform: {
        experimentalImportSupport: false,
        inlineRequires: true,
      },
    }),
  },
};

module.exports = mergeConfig(getDefaultConfig(__dirname), config);

使用示例

初始化项目

# 创建新的 React Native 项目
npx react-native init MyApp --template react-native-template-typescript

# 或使用 Expo
npx create-expo-app MyApp --template expo-template-blank-typescript

生成组件

// src/components/Button/Button.tsx
import React from 'react';
import { TouchableOpacity, Text, StyleSheet, ViewStyle, TextStyle } from 'react-native';

interface ButtonProps {
  title: string;
  onPress: () => void;
  variant?: 'primary' | 'secondary';
  disabled?: boolean;
}

export const Button: React.FC<ButtonProps> = ({
  title,
  onPress,
  variant = 'primary',
  disabled = false,
}) => {
  return (
    <TouchableOpacity
      style={[styles.button, styles[variant], disabled && styles.disabled]}
      onPress={onPress}
      disabled={disabled}
      activeOpacity={0.8}
    >
      <Text style={[styles.text, styles[`${variant}Text`]]}>{title}</Text>
    </TouchableOpacity>
  );
};

const styles = StyleSheet.create({
  button: {
    paddingVertical: 12,
    paddingHorizontal: 24,
    borderRadius: 8,
    alignItems: 'center',
  },
  primary: {
    backgroundColor: '#007AFF',
  },
  secondary: {
    backgroundColor: 'transparent',
    borderWidth: 1,
    borderColor: '#007AFF',
  },
  disabled: {
    opacity: 0.5,
  },
  text: {
    fontSize: 16,
    fontWeight: '600',
  },
  primaryText: {
    color: '#FFFFFF',
  },
  secondaryText: {
    color: '#007AFF',
  },
});

配置导航

// src/navigation/RootNavigator.tsx
import React from 'react';
import { NavigationContainer } from '@react-navigation/native';
import { createNativeStackNavigator } from '@react-navigation/native-stack';
import { HomeScreen } from '../screens/HomeScreen';
import { DetailsScreen } from '../screens/DetailsScreen';

export type RootStackParamList = {
  Home: undefined;
  Details: { id: string };
};

const Stack = createNativeStackNavigator<RootStackParamList>();

export const RootNavigator: React.FC = () => {
  return (
    <NavigationContainer>
      <Stack.Navigator initialRouteName="Home">
        <Stack.Screen name="Home" component={HomeScreen} />
        <Stack.Screen name="Details" component={DetailsScreen} />
      </Stack.Navigator>
    </NavigationContainer>
  );
};

配置 Redux Store

// src/store/store.ts
import { configureStore } from '@reduxjs/toolkit';
import { setupListeners } from '@reduxjs/toolkit/query';
import { api } from './api';
import userReducer from './slices/userSlice';

export const store = configureStore({
  reducer: {
    user: userReducer,
    [api.reducerPath]: api.reducer,
  },
  middleware: (getDefaultMiddleware) =>
    getDefaultMiddleware().concat(api.middleware),
});

setupListeners(store.dispatch);

export type RootState = ReturnType<typeof store.getState>;
export type AppDispatch = typeof store.dispatch;

质量门限

代码质量

  • 启用 TypeScript 严格模式
  • 使用 React Native 配置的 ESLint
  • 使用 Prettier 进行代码格式化
  • 生产代码中不使用 any 类型

性能基准

  • 应用启动时间 < 2 秒
  • 滚动时保持 60fps
  • 内存使用在平台限制内
  • 通过摇树优化打包大小

测试覆盖率

  • 单元测试覆盖率 > 80%
  • 组件测试覆盖率 > 70%
  • 覆盖 E2E 关键路径

错误处理

常见问题

  1. Metro 打包器缓存问题

    npx react-native start --reset-cache
    
  2. iOS pod 安装失败

    cd ios && pod install --repo-update
    
  3. Android Gradle 同步问题

    cd android && ./gradlew clean
    
  4. 原生模块链接问题

    npx react-native link
    # 或对于较新版本,使用自动链接
    

相关技能

  • flutter-dart - 替代的跨平台框架
  • mobile-testing - 全面的测试框架
  • mobile-perf - 性能分析和优化
  • push-notifications - 推送通知实现

版本历史

  • 1.0.0 - 具有核心 React Native 功能的初始版本