“一套代码,两个平台。就这。写一次,同时跑在iPhone和Android上。不是网页披着App的皮——真正意义上的原生组件。”这是React Native的产品宣言。Instagram在用,Shopify在用,微软和Coinbase也在用。这不是实验性玩具了,这些公司不会在未经验证的技术上押注。

单独为iOS和Android分别组建原生开发团队,意味着你要么养两支队伍,要么让同一支队伍干两倍的活。React Native能把这部分成本砍掉一半。省下来的钱是真金白银。跟你讲“跨平台省不了多少钱”的人,大概率是想卖你两套开发服务。

有一个认知问题值得厘清。React Native不是那种网页套壳的跨平台方案。后者一度把“跨平台”三个字的名声搞坏了——打开应用,滑动卡那么一点点,动画掉那么几帧,交互总像隔着一层浏览器。用户说不出具体哪里不对,就是不自觉用得少了。这种微妙的体验折损,对留存损害很大。

Facebook在2015年发布了React Native并开源。它编译成真正的原生组件。iOS端拿到的是iOS系统原生的UI元素,Android端拿到的是Android原生的。点击响应是实打实的原生响应速度,滚动惯性是对的,导航手势是对的。因为这些UI就是系统级别的,不是模拟出来的。正因为这点,早年“为了性能必须用原生开发”的论断已经站不太住了。曾经鸿沟真实存在,但在2025年,对绝大多数商业App而言,这个差距基本消失了。

用React Native构建跨平台App的过程,第一步不是写代码,是需求收集和规划。说句实在话,大部分失败的移动端项目就是折在这一步。不是在开发阶段崩盘的,不是测试测坏的,就在这里。所有人都想快速推进,没人乐意花两周泡在需求工作坊里,巴不得马上看到原型图。于是规划被压缩、跳过去,或者潦草应付——然后六个月开发周期过半,突然有人说“等等,我以为这个功能是包含在内的”,或者“我们忘了告诉你们,App要对接那个系统”。这时候回头翻修已完成的模块,成本极大。

需求收集本质上就是在问题变昂贵之前先把它问清楚。App到底要做什么?谁来用,为什么用?出错了怎么办?需要跟哪些外部系统对接?要用到哪些设备功能——相机、GPS、蓝牙、推送通知、生物识别?最后一条对React Native特别关键。绝大多数设备功能都有相当成熟的React Native库支撑,只有少数边缘场景需要单独写原生代码。如果App刚好踩中这个边缘场景,你得在第一周知道,而不是第十二周。

界面设计环节,React Native原生的组件架构意味着设计师可以用真正的iOS和Android设计语言来产出界面。不是让iOS用户忍受一套Material Design,也不是让Android用户看HIG风格。按钮、选择器、导航栏都是平台用户熟悉的模样。那些让用户下意识想说“这个App怎么操作起来不太对”的摩擦点,往往是跨平台方案强行统一UI带来的。React Native在这个层面的表现,来自一个朴素的事实:它渲染的本来就是平台原生组件。

开发阶段的核心逻辑是:一个JavaScript代码库驱动两个原生的壳。业务逻辑写一次,共享。数据显示、状态管理、网络请求全写一次就够。开发团队不再需要为一个功能开两次技术评审,不用在两个代码仓库里同步业务规则。热重载(Hot Reload)让修改界面的反馈循环短得令人愉快——保存文件,一秒内看到效果。对业务负责人来说,这转化成一个更实际的结果:功能和Bug修复推送到两端的时间窗口可以大幅收窄。

测试不能省,但跨平台的测试策略和双原生团队不一样。因为绝大部分业务逻辑只有一个实现,写测试的覆盖效率会高很多——一套单元测试覆盖两侧的逻辑表现。但这不意味着可以只在一类设备上验证。UI交互测试必须同时覆盖iOS和Android真机,尤其要关注平台特有的手势行为、返回键逻辑、权限弹窗交互。另外,首次提交App Store审核的团队遇到拒绝是常见情况。不是因为React Native,而是因为苹果的审核指南本身就是一道需要经验来跨过的槛。

对于业务负责人来说,需要记住的核心判断其实很短:如果你在2025年要启动一个需要同时覆盖iOS和Android的商业化App,默认就应该用React Native评估。除非你有极其明确的证据表明某些核心功能必须依赖双端完全独立的原生实现,否则“两个团队各写一次”的做法正在变成一种奢侈的冗余。这不是框架宗教之争,这是实打实的开发预算和迭代速度在说话。