Local MCP Server
在Termux中运行本地MCP服务器,支持Ollama模型的文件读取与命令执行。
面向 React Native 与 Expo 的开发实践手册,涵盖组件、状态管理、性能优化等核心内容。
openclaw skills install @daidai8910g/minimax-react-native-dev命令、参数、文件名以原文为准
一份实用的指南,用于构建生产就绪的 React Native 和 Expo 应用程序。涵盖 UI、动画、状态管理、测试、性能优化及部署。
根据需要查阅以下资源:
headerLargeTitle、headerBackButtonDisplayMode)、链接、模态框、弹出面板、上下文菜单expo-image、安全区域(contentInsetAdjustmentBehavior)、原生控件、模糊/玻璃效果、本地存储memo、包体积分析、首次内容渲染时间(TTI)、内存泄漏、动画性能use*Permissions 钩子)、触觉反馈、通知、生物识别components/ui/、stores/、services/)、路径别名、SDK 升级、EAS 构建/提交、CI/CD、DOM 组件| 用途 | 推荐方案 | 不推荐方案 |
|---|---|---|
| 列表展示 | FlashList(@shopify/flash-list)+ memo 渲染项 | FlatList(无视图复用) |
| 图片加载 | expo-image | RN <Image>(无缓存、不支持 WebP) |
| 点击交互 | Pressable | TouchableOpacity(过时) |
| 音频播放 | expo-audio | expo-av(已弃用) |
| 视频播放 | expo-video | expo-av(已弃用) |
| 动画实现 | Reanimated 3 | RN Animated API(功能有限) |
| 手势处理 | Gesture Handler | PanResponder(过时) |
| 平台判断 | process.env.EXPO_OS | Platform.OS |
| 上下文获取 | React.use() | React.useContext()(React 18 后推荐) |
| 安全区域滚动 | contentInsetAdjustmentBehavior="automatic" | <SafeAreaView> |
| SF 符号 | expo-image 配合 source="sf:name" | expo-symbols |
| 场景 | 建议考虑 |
|---|---|
| 长列表出现滚动卡顿 | 使用虚拟化列表库(如 FlashList) |
| 希望使用 Tailwind 风格类名 | NativeWind v4 |
| 高频读取本地数据 | 同步存储方案(如 MMKV) |
| 新项目使用 Expo | 优先选择 Expo Router 而非裸 React Navigation |
| 状态类型 | 推荐方案 |
|---|---|
| 本地 UI 状态 | useState / useReducer |
| 全局应用状态 | Zustand 或 Jotai |
| 服务器或异步数据 | React Query |
| 表单状态 | React Hook Form + Zod |
| 优先级 | 问题 | 解决方案 |
|---|---|---|
| 严重 | 列表滚动卡顿 | 使用 FlashList + 项组件 memo |
| 严重 | 包体积过大 | 避免通配符导入,启用 R8 压缩 |
| 高 | 过多重新渲染 | 使用 Zustand 选择器、React Compiler |
| 高 | 启动缓慢 | 关闭包压缩、使用原生导航 |
| 中等 | 动画掉帧 | 仅对 transform 和 opacity 进行动画 |
# 1. 创建项目
npx create-expo-app@latest my-app --template blank-typescript
cd my-app
# 2. 安装 Expo Router 及核心依赖
npx expo install expo-router react-native-safe-area-context react-native-screens
# 3. (可选)安装常用附加模块
npx expo install expo-image react-native-reanimated react-native-gesture-handler配置步骤如下:
package.json 中设置入口文件:"main": "expo-router/entry"app.json 中添加 scheme:"scheme": "my-app"App.tsx 和 index.tsapp/_layout.tsx 作为根堆栈布局app/(tabs)/_layout.tsx 用于标签页导航app/(tabs)/ 下创建路由文件(详见 [navigation.md](references/navigation.md))如需支持 Web,还需安装:npx expo install react-native-web react-dom @expo/metro-runtime
在编写代码前先查阅参考文档:涉及导航、列表、网络请求或项目搭建时,请先阅读对应参考文件,了解最佳实践与常见陷阱。
优先使用 Expo Go(npx expo start)。仅当需要使用本地 Expo 模块、Apple 平台目标或 Expo Go 不支持的第三方原生模块时,才需自定义构建(eas build)。
条件渲染:使用 {count > 0 && <Text />} 而非 {count && <Text />}(后者会将 0 当作真值渲染“0”)。
动画规则:仅对 transform 和 opacity 进行动画——这些属性由 GPU 合成,不会引发布局重排。
导入规范:始终直接从源文件导入,避免使用通配符导入(barrel files),以减少包体积。
列表与图片:在使用 FlatList 或 RN <Image> 前,请参考“组件使用建议”表格——通常情况下,FlashList 和 expo-image 是更优选择。
路由文件命名:始终使用连字符命名法(kebab-case),禁止在 app/ 目录中混入组件、类型或工具函数。
tsconfig.json 中路径别名已配置EXPO_PUBLIC_API_URL 环境变量GestureHandlerRootView(若使用手势)contentInsetAdjustmentBehavior="automatic"FlashList 而非 FlatList--profile 模式下进行性能分析,修复帧时间超过 16ms 的部分source-map-explorer 分析包体积,确认无通配符导入React Native 开发 → 请参阅 flutter-dev 技能。
iOS 原生(UIKit/SwiftUI)→ 请参阅 ios-application-dev 技能。
Android 原生(Kotlin/Compose)→ 请参阅 android-native-dev 技能。
*React Native 是 Meta Platforms, Inc. 的注册商标。Expo 是 650 Industries, Inc. 的注册商标。所有其他产品名称均为其各自所有者的商标。*
已收录 1 个 Skill