React Native快速入门:构建你的第一个APP —— 一个35岁老码农的深夜手记
上周五晚上十一点半,我正窝在老家客厅的旧沙发上调试一段React Native代码,窗外淅淅沥沥下着小雨。老婆已经睡了,女儿也早早关灯——这孩子现在管我比她妈还严:“爸爸,别熬夜,你头发都快掉没了。”
其实我也不想熬,但明天早上九点有个线上会议,客户要看我们新做的MVP(最小可行产品)。可偏偏这个该死的安卓模拟器死活跑不起来,红屏错误提示像嘲讽一样弹出来:“Invariant Violation: requireNativeComponent: "RCTView" was not found in the UIManager.”
那一刻,我真的有点崩溃。
我今年35岁,在互联网行业摸爬滚打十二年,从Java Web干到Node.js,再转前端,如今又一头扎进跨端开发。去年十月,我和老婆商量后决定搬回湖南老家远程办公。省下的不只是每月3500块房租,更是那种被大都市压得喘不过气的窒息感。但代价是——没人带、没团队、所有技术问题都得自己啃。
起因:为什么选React Native?
说实话,我一开始对React Native是抗拒的。
“又是JS写的移动端?性能能行吗?”
“原生不好吗?干嘛非要用JS桥接?”
“社区更新太快,今天学的东西明天就过时。”
这些话我都说过,甚至在2018年面试一家创业公司时,直接跟CTO说:“我不碰RN,太折腾。”
但时代变了。去年底,我接到一个外包单子:帮一个本地农产品合作社做一款小程序+APP,预算不多,时间紧,要求iOS和安卓都要覆盖。如果用原生开发,两个人至少三个月;如果用Flutter,我又得重新学Dart;而React Native——嘿,我已经有三年React经验了。
权衡之下,我咬牙选了RN。
“就当给自己的技术栈续命吧。”我在笔记本上写下这句话,旁边还贴着一张纸条:“别怕,35岁也能学新东西。”
初体验:从“Hello World”到红屏地狱
安装环境那天,我花了整整一天。
先是Node版本不对,nvm切换半天;然后是Xcode命令行工具没装,报错“xcrun: error: invalid active developer path”;安卓那边更惨,SDK Manager打不开,AVD创建失败……最后还是靠Replit Agent帮我理清了依赖关系。
等等,Replit Agent?这玩意儿你可能听说过,也可能没听过。简单说,它是Replit平台最近推出的AI编程助手,能自动分析你的项目结构、依赖冲突、甚至帮你生成修复脚本。我不是它的托,但那天下午,它真的救了我。
我当时在本地终端里疯狂敲命令,越试越乱。突然想起前几天注册的Replit账号,就把整个项目拖进去,点了“Ask Agent”按钮。三分钟后,它返回了一段shell脚本:
# Fix Android SDK path and install missing build-tools
export ANDROID_HOME=$HOME/Library/Android/sdk
sdkmanager "build-tools;33.0.0"
echo "export ANDROID_HOME=$ANDROID_HOME" >> ~/.zshrc
我照着执行,居然真通了!模拟器终于跑起来了。
那一刻我坐在电脑前,差点笑出声——原来AI不是来抢我们饭碗的,是来当“深夜救火队友”的。
第一个APP:不是Todo,而是“家庭菜谱”
很多人学RN,第一课都是写个Todo List。但我实在提不起兴趣。天天看“Buy milk”、“Finish report”,头都大了。
我想做个真正有用的东西。
于是,我决定做一个“家庭菜谱”APP。功能很简单:
- 录入家常菜做法(文字+图片)
- 按食材搜索
- 离线可用(毕竟农村网络不稳定)
名字我都想好了,叫“阿婆的味道”——我妈在我小时候总做一道辣椒炒腊肉,香得邻居都来问配方。
技术栈选得很克制:
- React Native 0.72(稳定版)
- Expo Go(免配置真机调试)
- AsyncStorage(存菜谱数据)
- react-native-image-picker(拍照或选图)
代码写得磕磕绊绊。比如,我想让图片圆角显示,结果在iOS上正常,安卓上却是方的。查文档才发现,borderRadius在安卓上需要配合overflow: 'hidden'才生效。
又比如,异步存储的数据结构设计。一开始我把所有菜谱塞进一个大对象,结果一多就卡。后来改成数组+ID索引,性能立马提升。
这些坑,没人告诉我,全靠自己踩。但每解决一个问题,就像在黑暗里点亮一盏小灯。
关键词来了:Llama和我的“离线大脑”
说到这儿,必须提Llama。
不是Meta那个Llama 2大模型,而是我自己搭的一个本地推理服务——基于Llama.cpp跑在Mac mini上的轻量问答机器人。
为什么搞这个?因为我发现,每次查React Native文档,要么翻官方英文站(慢),要么搜Stack Overflow(信息过时),要么问ChatGPT(有时候胡说八道)。
于是我用Llama.cpp + 一个微调过的RN知识库,在家里搭了个“离线AI助手”。启动命令就一行:
./main -m ./models/rn-finetuned.gguf -p "How to handle permissions in React Native for camera?" --threads 4
它不能生成完整代码,但能精准回答:“Use PermissionsAndroid.request() on Android, and add NSCameraUsageDescription in Info.plist for iOS.”
这玩意儿成了我的“第二大脑”。尤其晚上断网时(老家宽带经常抽风),它就是我的救命稻草。
有人问我:“你35岁了,还折腾这些?不如躺平。”
我说:“躺平可以,但别让我脑子生锈。”
那个红屏的夜晚,我是怎么熬过来的
回到开头那个周五晚上。
红屏错误出现后,我先深呼吸三次——这是老婆教我的,“急不得,越急越错”。
然后我做了三件事:
- 复现问题:在Expo Go里跑同样代码,没问题;说明是原生模块集成出错了。
- 查日志:
adb logcat看安卓底层日志,发现是某个第三方库(react-native-svg)没正确链接。 - 求助Replit Agent:我把package.json和错误日志扔进去,它建议:“Run
npx react-native link react-native-svgor use autolinking with CocoaPods.”
果然,是我手动link的时候漏了步骤。
凌晨一点,APP终于跑起来了。首页显示着我妈的辣椒炒腊肉照片,配文:“腊肉切片,青椒切丝,热锅冷油,爆香蒜末……”
我截图发到家庭群里。
女儿秒回:“爸爸好厉害!”
老婆回了个拥抱表情,后面加了一句:“早点睡,明天还要开会呢。”
那一刻,所有的疲惫都值了。
给新手的几点真心话
如果你也想学React Native,作为一个踩过无数坑的老兵,我想说:
1. 别追求“一步到位”
我见过太多人一开始就搞CI/CD、TypeScript、Redux Toolkit、Navigation v6……结果连基础组件都没跑通就放弃了。先跑起来再说,哪怕只有个按钮。
2. 善用工具,但别迷信AI
Replit Agent、Copilot、Llama这些工具是加速器,不是方向盘。它们能帮你写代码,但不能替你理解原理。我依然坚持手敲每一行核心逻辑。
3. 找个“真实项目”驱动学习
别再做Todo了!做你生活中真正需要的东西:记账、健身打卡、宠物喂食提醒……有情感投入,才有坚持下去的动力。
4. 接受“不完美”
我的“阿婆的味道”到现在还有bug:图片偶尔加载慢,搜索功能没做分词。但用户(也就是我爸妈)说:“能用就行,比手写笔记强多了。” 技术人的完美主义,有时候反而是枷锁。
35岁的我,为什么还在一线写代码?
很多人觉得,程序员35岁就该转管理、转架构、转售前,或者干脆转行。
我也动摇过。去年有猎头给我推了个“高级技术经理”岗,月薪从现在的22k涨到30k,但要求“不再参与编码”。
我犹豫了一周,最终拒绝了。
不是钱不够多,而是我发现——我依然享受把想法变成可运行代码的那个瞬间。
在老家的小书房里,没有会议室、没有OKR、没有站会,只有我和键盘。当我按下Cmd+R,看到模拟器里跳出自己写的界面,那种创造的快乐,和十年前在大学机房第一次跑通C语言程序时,一模一样。
技术会过时,框架会更迭,但解决问题的能力不会。而React Native,不过是这个时代给我的一把新锤子。至于钉子在哪?——生活处处都是。
最后一点思考
写这篇文章的时候,已经是周日凌晨三点。雨停了,窗外传来几声蛙鸣。
我忽然想起刚入行那会儿,师傅跟我说:“写代码不是为了炫技,是为了让人活得更轻松一点。”
现在我才真正懂这句话。
我的“阿婆的味道”可能永远不会上App Store,但它让我妈学会了用手机记录菜谱,让远嫁的女儿能随时看到家乡的味道。这就够了。
所以,如果你也在深夜调试RN代码,被红屏折磨得想砸电脑——别放弃。泡杯茶,深呼吸,看看窗外有没有星星。你不是一个人在战斗。
技术路上,年龄从来不是障碍,热情才是燃料。
而我,这个35岁还在一线敲代码的老程序员,会继续写下去。也许下个项目,我会试试用Llama Agent自动生成测试用例,或者让Replit帮我部署到Firebase。
谁知道呢?反正,明天又是新的一天。
后记:
本文所有技术细节均真实可复现。
“阿婆的味道”源码已开源在GitHub(私有仓库,但可申请访问)。
Replit Agent免费版够用,Llama.cpp跑在8GB内存的Mac mini上也没问题。
房租确实省了3500,但电费涨了200——因为电脑24小时开着。
共勉。

评论 0