AI辅助编程实战:用Cursor从零开发React Native移动应用

📅 发布时间:2026/9/4 16:12:22
AI辅助编程实战:用Cursor从零开发React Native移动应用
这次我们来看一个用 Cursor 从零开发一款热门 APP 的实战项目。这个项目的核心不是讲复杂的移动端架构而是展示如何利用 AI 编程工具高效、低成本地完成一个完整 APP 的构思、设计、编码和测试全流程。对于想快速验证产品想法、学习现代开发流程或探索 AI 辅助编程潜力的开发者来说这是一个极具参考价值的案例。本文将以开发一款名为“死了么”的 APP 为例全程拆解。我们将重点关注如何用 Cursor 定义产品需求、设计交互逻辑、生成前端界面与后端代码、处理数据交互以及最终完成一个可演示的版本。整个过程强调实操你会看到具体的指令、生成的代码块、遇到的问题及解决方案。无论你是想入门全栈开发还是希望提升 AI 工具的使用效率这篇文章都能提供一条清晰的路径。我们将从环境准备开始一步步走到功能测试。重点不是复刻一个复杂的商业应用而是掌握“提出问题 - 获取代码 - 调试运行 - 迭代优化”的核心工作流。下面我们直接进入正题。1. 核心能力速览Cursor 驱动开发在深入细节之前我们先通过一个表格快速了解本次项目所依赖的核心工具Cursor及其在 APP 开发中的关键作用以便你判断是否值得投入时间学习。能力项说明核心工具Cursor集成 AI 的代码编辑器开发模式AI 辅助编程通过自然语言描述生成和修改代码技术栈覆盖前端如 React Native, Flutter、后端如 Node.js, Python、数据库设计等硬件门槛无特殊要求普通开发电脑即可依赖网络调用 AI 模型启动方式下载安装 Cursor登录账号部分功能需 Pro 版即可开始核心价值加速原型开发、辅助代码编写、解释复杂逻辑、调试与重构适合场景个人项目原型、学习新框架、快速验证想法、代码重构与注释不适合场景完全替代开发者思考、处理极度复杂的业务安全逻辑、无网络环境2. 项目概述与“死了么”APP 定义“死了么”是一个带有戏谑色彩的概念 APP其核心功能类似于一个任务管理或“遗愿清单”工具。用户可以在这里记录自己各种奇奇怪怪的想法、想做的事情、或者“再不尝试就晚了”的事项。它并非一个真实的商业产品而是作为一个完美的教学项目涵盖了 APP 开发的常见模块用户系统、数据列表、增删改查、状态标记、简单的 UI/UX 设计。选择这个项目进行教学有几点好处第一功能明确且完整能覆盖大部分基础开发场景第二概念有趣能保持学习动力第三复杂度可控适合在单篇文章中演示从 0 到 1 的过程。我们将使用React NativeExpo作为前端框架因为它能同时覆盖 iOS 和 Android且与 Cursor 配合良好。后端和数据存储为了简化初期会使用本地 AsyncStorage后期扩展会提及云服务如 Supabase的接入思路。3. 环境准备与前置条件开始之前请确保你的开发环境满足以下要求。这是保证后续所有命令和步骤能顺利执行的基础。3.1 操作系统推荐: macOS, Windows 10/11, 或 Linux 发行版如 Ubuntu。说明: Cursor 和 Node.js 环境在这些系统上都有良好的支持。3.2 基础开发环境Node.js 与 npm: 这是运行 JavaScript 项目和包管理的核心。版本: 建议安装 LTS长期支持版如 Node.js 18.x 或 20.x。验证安装: 打开终端或命令提示符/PowerShell输入以下命令node --version npm --version如果能看到版本号说明安装成功。Git: 用于版本控制虽然不是必须但强烈建议安装。安装: 从 Git 官网 下载并安装。验证:git --version3.3 移动端开发环境针对 React Native with Expo为了能在真机或模拟器上运行 APP我们需要 Expo 工具链。安装 Expo CLI:npm install -g expo-cli或者使用更新的npx方式推荐避免全局依赖冲突npx create-expo-applatest --template blank在执行上述创建命令时会自动引导安装所需工具。模拟器或真机:iOS: 需要 macOS 系统和 Xcode可通过 App Store 安装。Android: 需要安装 Android Studio 并配置好虚拟设备AVD。真机: 在手机上下载“Expo Go”应用这是最方便的测试方式。3.4 Cursor 编辑器下载与安装: 访问 Cursor 官网 根据你的操作系统下载安装包。账号注册: 安装后打开 Cursor你需要注册一个账号。目前有免费额度但对于高强度开发可能需要考虑 Pro 版本以获得更长的上下文和更多功能。基础设置:在设置中可以将编辑器界面语言设置为中文如果你需要。熟悉快捷键特别是Cmd/Ctrl K用于调出 AI 指令输入框这是与 AI 交互的核心。4. 项目初始化与工程搭建一切就绪现在我们开始创建“死了么”APP 项目。4.1 使用 Expo 创建新项目打开终端进入你希望存放项目的目录执行以下命令npx create-expo-app sileme-app --template blank cd sileme-app这条命令会创建一个名为sileme-app的新目录并使用最简化的空白模板初始化一个 Expo 项目。4.2 在 Cursor 中打开项目打开 Cursor 编辑器通过File - Open Folder选择刚才创建的sileme-app文件夹。现在你的 Cursor 左侧文件树应该能看到项目结构了。4.3 安装基础 UI 库可选但推荐为了快速构建美观的界面我们引入一个流行的 React Native UI 库NativeBase或React Native Elements。这里以NativeBase为例。 在 Cursor 中你可以直接打开终端Terminal - New Terminal或者使用 Cursor 的 AI 功能来生成安装命令。方法一手动终端:npm install native-base npm install react-native-svg13.4.0 npm install react-native-safe-area-context方法二AI 指令: 在 Cursor 中按Cmd/Ctrl K输入“请为我生成安装 NativeBase 及其所需依赖的 npm 命令”。Cursor 通常会给出准确的命令你复制到终端执行即可。4.4 项目结构预览初始化的项目主要文件如下App.js: 应用的入口组件我们将主要在这里编写代码。package.json: 项目依赖和脚本定义。assets/: 存放图片、字体等静态资源。node_modules/: 安装的依赖包无需手动修改。5. 核心功能开发实战接下来我们将分模块利用 Cursor 的 AI 对话能力逐步构建“死了么”APP 的功能。5.1 需求分析与 AI 拆解首先我们需要明确 APP 的核心功能并将其转化为 Cursor 能理解的开发任务。在 Cursor 中新建一个聊天窗口或使用内置的 Chat 面板输入我们的产品需求“我将开发一个名为‘死了么’的趣味任务管理APP。核心功能包括1. 一个任务列表每条任务有标题、描述、创建时间、完成状态。2. 可以添加新任务。3. 可以标记任务为‘已达成’或‘未达成’。4. 可以删除任务。5. 任务数据需要持久化存储在本地。请为我规划一个使用 React Native (Expo) 和 NativeBase 的技术实现方案并给出第一步的代码。”Cursor 会生成一份概要包括可能使用的状态管理如 React 的useState,useEffect、存储方案AsyncStorage以及组件结构。这相当于我们的“产品需求文档与技术设计稿”。5.2 构建数据模型与存储层数据是应用的基石。我们首先创建处理任务数据的逻辑。创建数据服务文件: 在项目根目录新建一个文件夹services并在其中创建TaskService.js。使用 AI 生成代码: 在TaskService.js文件中按Cmd/Ctrl K输入“请编写一个 TaskService 模块使用 AsyncStorage 实现以下功能1.getAllTasks: 获取所有任务。2.saveTask: 保存一个新任务任务对象包含 id, title, description, isCompleted, createdAt。3.updateTask: 更新一个已有任务。4.deleteTask: 删除一个任务。请使用 ES6 模块化语法。”生成的代码可能如下// services/TaskService.js import AsyncStorage from react-native-async-storage/async-storage; const TASKS_KEY sileme_app_tasks; export const TaskService { async getAllTasks() { try { const jsonValue await AsyncStorage.getItem(TASKS_KEY); return jsonValue ! null ? JSON.parse(jsonValue) : []; } catch (e) { console.error(Failed to load tasks., e); return []; } }, async saveTask(newTask) { try { const tasks await this.getAllTasks(); tasks.push(newTask); await AsyncStorage.setItem(TASKS_KEY, JSON.stringify(tasks)); return true; } catch (e) { console.error(Failed to save task., e); return false; } }, async updateTask(updatedTask) { try { let tasks await this.getAllTasks(); tasks tasks.map(task task.id updatedTask.id ? updatedTask : task ); await AsyncStorage.setItem(TASKS_KEY, JSON.stringify(tasks)); return true; } catch (e) { console.error(Failed to update task., e); return false; } }, async deleteTask(taskId) { try { let tasks await this.getAllTasks(); tasks tasks.filter(task task.id ! taskId); await AsyncStorage.setItem(TASKS_KEY, JSON.stringify(tasks)); return true; } catch (e) { console.error(Failed to delete task., e); return false; } }, };安装 AsyncStorage: 如果提示AsyncStorage未找到在终端运行npx expo install react-native-async-storage/async-storage。5.3 构建主界面与任务列表现在我们来修改App.js创建应用的主界面。清空并重构 App.js: 将App.js原有内容全部删除。使用 AI 搭建骨架: 在空的App.js中输入 AI 指令“请使用 React Native 和 NativeBase 组件构建‘死了么’APP的主界面。要求1. 顶部有一个标题‘死了么’。2. 中间是一个任务列表FlatList每个任务项显示标题、描述和完成状态。3. 列表项左侧有一个复选框可以切换完成状态右侧有一个删除按钮。4. 底部有一个‘添加新任务’的按钮。先使用静态数据模拟稍后再连接真实服务。”Cursor 会生成一个包含状态、样式和组件结构的完整文件。你需要检查并确保引入了正确的组件如NativeBaseProvider,Box, Text, FlatList, Checkbox, Button, Icon等。连接真实数据服务: 接下来我们让静态数据动起来。在App.js中找到useEffect和加载数据的部分通过 AI 指令进行修改“请修改代码在组件加载时调用TaskService.getAllTasks()来初始化任务列表。并实现复选框切换状态时调用TaskService.updateTask删除按钮点击时调用TaskService.deleteTask。”按照 AI 的指引将状态管理与TaskService的方法连接起来。关键点在于每次操作增、删、改后都需要重新从TaskService获取数据并更新状态以刷新界面。5.4 实现添加任务功能我们需要一个模态框Modal或新页面来添加任务。这里使用 NativeBase 的Modal组件。添加状态控制模态框: 在App.js的组件状态中添加showModal和用于输入的新任务字段如newTitle,newDescription。生成模态框 UI: 使用 AI 指令“请使用 NativeBase 的 Modal 组件生成一个添加任务的表单。表单包含两个输入框标题和描述以及‘取消’、‘保存’两个按钮。将‘保存’按钮的点击事件留空。”实现保存逻辑: 在‘保存’按钮的事件处理函数中编写逻辑构造一个新的任务对象需要生成唯一ID可以使用Date.now()或uuid库。调用TaskService.saveTask(newTask)。保存成功后关闭模态框清空输入框并重新获取任务列表刷新界面。你可以向 Cursor 描述这个逻辑让它帮你生成代码。5.5 完善样式与交互基本的增删改查完成后我们需要让 APP 看起来更舒服。布局调整: 使用 AI 指令如“请优化任务列表项的样式让标题加粗描述文字颜色变浅并添加适当的内边距和阴影。”空状态处理: 当任务列表为空时显示一个友好的提示。指令“如果任务列表为空则在屏幕中央显示一个图标和文字‘还没有任务快去添加一个吧’”。交互反馈: 使用 NativeBase 的Toast组件在任务添加、更新、删除成功时给出提示。指令“请在保存任务成功后显示一个‘任务已添加’的 Toast 提示。”6. 功能测试与效果验证代码编写完成后必须进行测试以确保功能正常。6.1 启动开发服务器在项目根目录的终端中运行npx expo start这会启动 Expo 开发服务器并显示一个二维码和本地 URL。6.2 在设备上运行iOS 模拟器: 在终端按i。Android 模拟器: 在终端按a需提前启动 AVD。真机: 在手机 Expo Go App 中扫描终端显示的二维码。6.3 核心功能测试清单在设备上打开 APP 后请按顺序测试以下功能点测试项操作步骤预期结果失败排查点1. 应用启动打开 APP显示“死了么”标题和空列表或初始任务检查expo start是否报错检查App.js根组件渲染是否正常2. 添加任务点击“添加”按钮 - 输入标题和描述 - 点击保存模态框关闭新任务出现在列表顶部可能有 Toast 提示检查TaskService.saveTask是否被调用检查状态更新逻辑查看终端有无红色报错3. 标记完成点击某个任务项的复选框该任务的样式可能变化如文字中划线且状态被持久化重启APP后仍保持检查TaskService.updateTask逻辑检查任务对象的isCompleted字段是否正确更新4. 删除任务点击某个任务项的删除按钮该任务从列表中消失检查TaskService.deleteTask逻辑检查过滤函数是否正确5. 数据持久化添加几个任务 - 完全关闭 APP - 重新打开之前添加的任务依然在列表中检查AsyncStorage的 key 是否一致检查getAllTasks在useEffect中是否被调用6. 空状态提示删除所有任务列表区域显示友好的空状态提示文字和图标检查条件渲染逻辑tasks.length 06.4 调试与 Cursor 的辅助在测试过程中你一定会遇到问题。这时 Cursor 的调试能力就派上用场了。错误解释: 将终端里的红色错误信息复制到 Cursor Chat问它“这个错误是什么意思如何解决”代码优化: 选中一段你觉得臃肿或运行不正常的代码按Cmd/Ctrl K输入“请优化/重构这段代码”或“为什么这段代码会导致 XXX 问题”添加新功能: 想增加一个搜索功能直接告诉 Cursor“我想在标题下方增加一个搜索框能够实时过滤任务列表。请帮我修改代码。”7. 项目优化与扩展思路一个可用的原型已经完成。但要让项目更健壮、更接近真实产品还需要考虑以下方面。7.1 状态管理优化目前我们使用 React 的useState和useEffect来管理任务状态。当应用复杂时可以考虑引入状态管理库如Zustand或Redux Toolkit。你可以让 Cursor 帮你将现有的状态逻辑迁移到这些库中。7.2 后端与云同步AsyncStorage只适用于本地。如果你想实现多设备同步需要接入后端。选择后端服务: SupabasePostgreSQL 实时 API 认证或 Firebase 都是优秀的选择它们提供了简单的 SDK。让 Cursor 协助迁移: 向 Cursor 描述“我想将数据存储从 AsyncStorage 迁移到 Supabase。我有一个 Supabase 项目URL 和 anon key 是 XXX。请帮我重写TaskService.js使用supabase/supabase-js库来实现增删改查。”添加用户认证: 进一步你可以让 Cursor 帮你添加登录注册页面并实现基于用户的数据隔离。7.3 性能与体验列表优化: 如果任务数量巨大需要优化FlatList的性能如使用getItemLayoutkeyExtractor。加载状态: 在数据加载时显示一个加载指示器ActivityIndicator。代码分割与懒加载: 对于大型应用可以考虑使用React.lazy和Suspense。7.4 构建与发布虽然本文重点是开发但你可以用 Cursor 查询发布流程“如何使用 EAS Build 将我的 Expo 应用构建成 iOS 和 Android 安装包”“如何为 Expo 应用配置应用图标和启动屏幕”“提交到 App Store 和 Google Play 的主要步骤是什么”8. 常见问题与排查方法在开发过程中你可能会遇到以下典型问题问题现象可能原因排查方式解决方案expo start失败或报错Node.js 版本不兼容、端口被占用、依赖未安装查看终端错误信息运行node -v检查版本运行npm install重装依赖升级/降级 Node.js 至 LTS 版本更换端口expo start --port 8080删除node_modules和package-lock.json后重装APP 白屏或报 “Unable to resolve module”模块未安装或路径错误检查报错信息中缺失的模块名检查import语句拼写在终端安装缺失的包npx expo install [package-name]确保import路径正确AsyncStorage 数据存不上或读不出Key 不一致、存储操作未等待异步、数据格式非 JSON使用AsyncStorage.getAllKeys()和AsyncStorage.getItem()调试检查await关键字统一使用常量定义 Key确保所有异步操作都正确使用async/await存之前JSON.stringify取之后JSON.parseUI 样式错乱或 NativeBase 组件不显示NativeBase Provider 未包裹、SVG 或安全区上下文依赖未安装检查App.js根组件是否被NativeBaseProvider包裹检查package.json中相关依赖确保根组件正确包裹运行npx expo install react-native-svg react-native-safe-area-contextCursor AI 生成的代码运行报错AI 可能使用了过时的 API 或错误语法仔细阅读错误信息定位到具体行将错误信息反馈给 Cursor 请求修正不要盲目信任 AI 代码要具备基础的理解和调试能力。用 AI 生成用人脑审查。真机 Expo Go 扫描二维码无法连接手机和电脑不在同一局域网检查电脑和手机的 Wi-Fi 是否连接同一网络确保处于同一网络尝试使用expo start --tunnel启动可能需要登录 Expo 账号9. 最佳实践与使用建议通过这个项目我们不仅完成了一个 APP更实践了一套 AI 辅助开发的工作流。以下是一些总结建议明确指令是关键给 Cursor 的指令越具体、上下文越清晰生成的代码质量越高。从“写一个函数”升级到“写一个接收 A、B 参数处理 C 逻辑返回 D 格式的函数”。迭代开发小步快跑不要指望一次生成整个完美应用。像本项目一样从数据层 - 列表展示 - 交互功能 - 样式优化分模块迭代。每完成一个小功能就测试一次。理解优于复制即使 AI 生成了代码也要努力去理解每一行的作用。这能帮助你在出错时快速定位并在未来需要修改时知道从何下手。善用 Cursor 的代码库感知Cursor 能“看到”你整个项目文件。在提问时可以引用现有代码如“参考TaskService.js的风格为UserService.js实现类似功能”它能保持一致性。版本控制是安全网在尝试大的改动或让 AI 重构代码前先使用 Git 提交当前工作状态。如果新代码导致问题可以轻松回退。合规与版权意识本项目是教学演示。如果你开发真正上架的应用需注意数据隐私如 GDPR、用户协议并确保所有代码和资源如图标、字体的合法性。从零到一开发一个 APP最大的障碍往往不是技术而是如何开始以及如何将想法分解为可执行的步骤。Cursor 这类工具极大地降低了这个过程的启动门槛它像一个随时待命的资深搭档帮你处理重复的样板代码解释复杂的概念甚至提供多种解决方案供你选择。然而它无法替代你对产品逻辑的思考也无法替代你最终对代码质量的责任。真正的效率提升来自于“人的清晰思路”与“AI的强大辅助”的结合。建议你以这个“死了么”项目为起点尝试加入更多功能比如分类标签、分享、数据统计或者完全换一个你自己的创意项目在实践中熟练掌握这套开发流程。