说实话:三年前,如果有网络代理机构询问我关于移动的问题,我会建议他们只需构建PWA就完事了。那个建议没有经得起时间考验。移动应用市场在2025年创造了935亿美元的收入,客户期望发生了巨大变化,React Native已经成熟到我真正喜欢与之合作的程度。如果你的代理机构已经使用Next.js和React进行构建,那你正坐在可转移技能的金矿上。但确实存在真实的陷阱,我已经踩过大多数,所以你不必这样做。

这篇文章是我希望在我们开始认真对待移动客户时已有的指南。它涵盖了工程现实、商业经济学以及你需要的部署管道。没有关于"协同效应"的空洞说法——只是从上线生产应用中得到的宝贵教训。

目录

React Native for Web Agencies: Adding Mobile to Your Next.js Practice in 2026

为什么2026年是网络代理机构进入移动领域的合适时机

时机论证不仅仅关乎市场规模。它关乎三个特定的转变聚合到一起:

React Native的新架构已经稳定。 Fabric渲染器和TurboModules多年来一直"即将推出",现在已成为默认配置。React Native和原生Swift/Kotlin之间的性能差距对90%的应用类别来说已经可以忽略不计。JSI(JavaScript接口)意味着你不再需要为每个原生调用都跨越一座桥——它是同步且快速的。

Expo成为了一个完整的平台。 Expo SDK 53(2026年初发布)支持几乎所有你需要的原生API。从Expo中退出以获取基本功能(如蓝牙或后台位置)的日子已经一去不复返了。EAS Build处理整个编译管道。对于大多数项目,你的机器上不再需要Xcode。

客户需求发生了转变。 我看到我们网络中的代理机构有一个模式:以前问"建一个网站"的客户现在问"建一个数字产品"。他们期望有网络存在和移动应用,他们期望它们共享一个设计系统。如果你能从一个团队交付两者,你就不是与独立的网络和移动商店竞争——你是在取代他们两者。

市场数字

根据Statista的2025年数据,全球移动应用收入预计到2027年将达到1.1万亿美元。但对代理机构更相关的是:典型企业客户在2025-2026年的移动应用预算为150K-500K美元用于MVP。这是大多数代理机构网络项目所能获得的2-3倍。

React生态系统重叠:实际可转移的内容

首先,让我们消除一个神话:React Native不是"只是用于手机的React"。你的开发人员会有一个学习曲线。但这比从头学习Swift和Kotlin要短得多。

以下是对什么可转移以及什么不可转移的诚实分析:

技能/技术 可转移到React Native? 备注
React组件模式 ✅ 是,直接 Hooks、context、状态管理——全部相同
TypeScript ✅ 是,直接 相同的语言,相同的工具
状态管理(Zustand、Jotai、Redux) ✅ 是,直接 即插即用兼容
React Query / TanStack Query ✅ 是,直接 相同的API,相同的缓存策略
CSS / Tailwind ⚠️ 部分 没有CSS级联。NativeWind弥补了这个差距
Next.js路由 ⚠️ 部分 Expo Router也是基于文件的,但导航范式不同
DOM操作 ❌ 否 没有DOM。句号。
HTML元素 ❌ 否 使用<View><Text><Pressable>代替
浏览器API ❌ 否 需要Expo模块或原生模块
CSS动画 ❌ 否 使用Reanimated 3(实际上更好)

甜蜜点是这样的:你的React开发人员可以在2-3周内在React Native中有生产力。他们不会是专家,但他们可以交付功能。与聘请原生开发人员相比,这是一个巨大的领先优势。

最让我惊讶的是什么

转移得比我预期更好的是心理模型。React的组件组合、单向数据流和声明式UI范式——这些是学习中的困难部分。API表面差异(<div><View>)相比之下微不足道。

转移得比我预期更差的是布局。是的,React Native使用Flexbox。但它是Flexbox,其中flexDirection: 'column'是默认值,没有display: grid,没有媒体查询(你使用useWindowDimensions),也没有级联样式。我们团队中的每个开发人员在第一周都对此感到困惑。

2026年的Expo:改变一切的平台

如果你在2019-2020年尝试过React Native并放弃了它,我理解。开发人员体验是粗糙的。Expo从根本上改变了这一点。

以下是Expo在2026年给你的东西:

  • Expo Router v4:基于文件的路由,镜像Next.js约定。你的开发人员会立即感到宾至如归。
  • Expo Modules API:用Swift/Kotlin编写原生模块,并具有干净的TypeScript接口。不再有笨拙的桥接代码。
  • EAS Build:iOS和Android的基于云的构建。iOS构建不需要Mac。
  • EAS Submit:自动App Store和Play Store提交。
  • EAS Update:无线更新,绕过App Store评审以进行仅JS的更改。
  • Expo Dev Client:自定义开发构建,包括你的原生模块,但保持快速刷新DX。
# 在2026年创建新的Expo项目
npx create-expo-app@latest my-app --template tabs
cd my-app
npx expo start

就是这样。你在iOS模拟器和Android模拟器上运行(或通过Expo Go的物理设备)在两分钟内完成。

Expo Router:从Next.js的桥梁

Expo Router值得特别关注,因为它是Next.js开发人员快速适应的最大原因。看看结构:

app/
  (tabs)/
    index.tsx        # 首页标签
    settings.tsx     # 设置标签
    _layout.tsx      # 标签布局
  profile/
    [id].tsx         # 动态路由
  _layout.tsx        # 根布局

如果你使用Next.js App Router构建,这个结构几乎完全相同。动态路由、布局、嵌套导航——概念直接映射。主要区别是移动导航使用堆栈和选项卡而不是页面和URL路径,但Expo Router很好地抽象了这一点。

React Native for Web Agencies: Adding Mobile to Your Next.js Practice in 2026 - architecture

Next.js和React Native之间的代码共享

这是代理机构获得真正ROI的地方。在网络和移动之间共享代码不仅仅是有好处——它是提供两项服务的经济理由。

要共享什么

积极共享:

  • 业务逻辑和实用程序
  • API客户端和数据获取钩子
  • 状态管理存储
  • 类型定义和验证模式(Zod在这里很好用)
  • 身份验证逻辑

谨慎共享:

  • 设计令牌(颜色、间距、排版规模)
  • 组件逻辑(但不是组件呈现)

不要共享:

  • UI组件直接(呈现原始体系不同)
  • 导航逻辑
  • 平台特定的动画

单仓库设置

2026年的标准方法是Turborepo或Nx单仓库。这是一个典型的结构:

packages/
  shared/
    src/
      hooks/
        useAuth.ts
        useProducts.ts
      utils/
        formatCurrency.ts
        validateEmail.ts
      types/
        user.ts
        product.ts
      api/
        client.ts
apps/
  web/          # Next.js应用
  mobile/       # Expo应用
// packages/shared/src/hooks/useProducts.ts
import { useQuery } from '@tanstack/react-query';
import { apiClient } from '../api/client';
import type { Product } from '../types/product';

export function useProducts(categoryId: string) {
  return useQuery<Product[]>({
    queryKey: ['products', categoryId],
    queryFn: () => apiClient.get(`/products?category=${categoryId}`),
    staleTime: 5 * 60 * 1000,
  });
}

这个钩子在你的Next.js应用和React Native应用中的工作方式完全相同。数据获取、缓存和状态管理是完全共享的。只有呈现产品的UI层不同。

Solito/通用方法

对于想要进一步推动代码共享的代理机构,Solito(由Fernando Rojo创建)可以在Next.js和Expo之间启用通用导航和一些共享组件。在2026年,React Nativereact-native-web库也足够成熟,可以进行设计系统共享,尽管我建议仅对已上线至少一个React Native项目的团队采用这种做法。它增加了复杂性。

我们的典型代码共享比率:40-60%的总代码库在网络和移动之间共享。这不是营销宣传——这是在六个客户项目中测得的。

EAS Build和部署:你的CI/CD管道

部署是移动开发历来困难的地方。应用签名、配置文件、Play Store合规——这是一个迷宫。EAS使其变得可管理。

EAS Build定价(2026)

计划 价格 月度构建积分 构建速度
免费 $0 30 iOS + 30 Android ~每次构建40分钟
生产 $99/月 200总计 ~每次构建15分钟
企业 $999/月 无限 ~每次构建8分钟(优先)

对于大多数代理机构,生产计划是最佳选择。一旦你有多个活跃项目,你会很快用尽免费层积分。

真实的CI/CD管道

这是我们使用的管道,在多个客户项目中表现良好:

# .github/workflows/mobile-deploy.yml
name: Mobile Deploy
on:
  push:
    branches: [main]
    paths:
      - 'apps/mobile/**'
      - 'packages/shared/**'

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 20
      - run: npm ci
      - run: npx eas-cli build --platform all --non-interactive --profile production
        env:
          EXPO_TOKEN: ${{ secrets.EXPO_TOKEN }}

  submit:
    needs: build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: npx eas-cli submit --platform all --non-interactive
        env:
          EXPO_TOKEN: ${{ secrets.EXPO_TOKEN }}

对于不涉及原生代码的仅JavaScript更新,使用EAS Update而不是完整构建:

# 推送OTA更新——用户在下次应用启动时获取它
eas update --branch production --message "修复结账按钮对齐"

这对代理机构来说意义重大。等待App Store评审需要1-3天的错误修复现在在几分钟内到达用户。

代理机构经济学:定价、人员配置和利润率

让我们谈钱。这是我看到代理机构犯最大错误的地方。

移动项目定价

不要像对网络项目那样对移动项目定价。它们构建成本更高,维护成本更高,并且附带持续的平台成本。以下是我们看到有效的方法:

项目类型 典型代理机构费率 时间线 总范围
简单应用(内容、身份验证、基本CRUD) $180-250/小时 8-12周 $90K-$180K
中型应用(付款、实时、集成) $180-250/小时 12-20周 $180K-$400K
复杂应用(离线优先、繁重的原生功能) $200-300/小时 20-32周 $350K-$750K
网络+移动捆绑(共享代码库) $180-250/小时 16-28周 $250K-$550K

网络+移动捆绑是你的竞争武器。客户以$350K的价格获得两者比向单独的商店支付$200K网络和$300K移动要好得多。由于代码共享,你的利润率也更好。

人员配置模型

你不需要立即聘请专职移动开发人员。以下是有效的进展:

  1. 第1阶段(第一个移动项目):你的高级React开发人员主导,有一个具有React Native经验的承包商作为指导。预算承包商$15-25K。
  2. 第2阶段(2-3个项目后):你的团队有足够的经验。聘请一个具有强大React Native背景的开发人员作为移动领导。
  3. 第3阶段(移动占收入的30%以上):建立一个2-3名开发人员的专门移动小组。

维护收入流

这是没有人告诉你关于移动的:即使客户没有添加功能,它也需要持续维护。iOS和Android每年发布主要OS版本。依赖关系需要更新。App Store政策会改变。这是经常性收入。

我们根据应用复杂性为移动应用维护合同收取$3,000-$8,000/月。在8-10个客户中,这是有意义的经常性收入,平滑项目基收入的波动性。

何时对移动客户说是(和否)

并非每个移动项目都适合你的代理机构。我已经艰难地学到了这一点。

说是什么时候:

  • 客户已经有你构建的网络产品——你了解领域、API、业务逻辑。你第一天就已经完成了40%。
  • 应用主要是数据驱动的——CRUD应用、仪表板、电子商务、内容交付。React Native在这里表现出色。
  • 客户有现实的时间表——最少8周用于任何有意义的事情。
  • 预算是$80K+——低于此值,你无法交付质量并维持利润率。

说否什么时候:

  • 应用需要大量GPU/图形——游戏、AR体验、复杂3D。使用Unity或原生。
  • 应用需要深度硬件集成——蓝牙LE外设、自定义相机管道、NFC支付处理。在React Native中可能,但原生模块开发会让你超出预算。
  • 客户想要"像素完美的平台原生"设计——如果他们希望他们的iOS应用感觉完全像SwiftUI应用,他们的Android应用感觉完全像Jetpack Compose,React Native增加开销。
  • 预算低于$50K——你会赔钱。将他们转介给自由职业者或无代码平台。
  • 客户没有API——如果你需要构建后端、移动应用和网络应用,仔细确定范围。这是三个项目,不是一个。

工程成本:没人谈论的数字

除了开发人员工资,移动还增加了网络代理机构不会考虑的成本:

成本 年度金额 备注
Apple开发人员账户 每个客户$99/年 App Store必需
Google Play开发人员账户 每个客户$25一次 Play Store必需
EAS Build(生产) $1,188/年 跨项目共享
App Store截图和资产 每个应用$500-2,000 常被遗忘在范围中
设备测试实验室 $2,000-5,000/年 物理设备或BrowserStack
推送通知服务 $0-500/月 Firebase开始免费,按规模增长
代码签名证书 包含在Apple开发者账户中 但管理它们很耗时
App Store优化 $500-2,000/发布 如果你为客户做这个

隐藏的成本是在真实设备上测试。 模拟器谎言。我们维护一个拥有6台iPhone(各种型号)和4台Android设备(三星、Pixel、一台便宜手机用于性能测试)的设备实验室。为此进行预算。

时间成本

App Store评审通常需要24-48小时,但在假期季节可能需要一周。Play Store评审通常更快(小时到一天)。在你的项目时间表中解释这一点——你不能像使用网络应用那样"在星期五部署"。

首次应用提交需要更长时间。Apple特别审查新开发人员账户。我们见过首次提交需要5-7天并经历拒绝-重新提交周期。

网络代理机构的实际迁移路径

如果你相信向你的实践添加移动,这是我推荐的路径:

第1-2个月:内部项目 使用Expo构建一个简单的内部应用。一个时间跟踪器、一个项目仪表板、任何东西。让你的团队在没有客户压力的情况下熟悉工具。使用这个来设置你的单仓库结构、CI/CD管道和设备测试流程。

第3-4个月:现有客户追加销售 向你最好的现有客户介绍移动伴侣应用。你已经了解他们的域、他们的API、他们的团队。作为参考案例,以稍微折扣的价格提供它。

第5-8个月:第一个外部移动客户 接纳一个具有现实范围的移动项目。最多保持12周。使用你的内部项目和第一个客户项目作为能力证明。

第9个月及以后:产品化 创建标准移动项目模板、估算电子表格和入职流程。这是移动变成真实服务线的时候,而不是实验。

在这个过程中,投资你的无头CMS能力——从网络相同的CMS提取内容的数据驱动移动应用是你能提供给客户的最高价值捆绑之一。

技术栈建议

对于在2026年开始的代理机构,这是我会押注的栈:

  • Expo SDK 53+ with Expo Router v4
  • NativeWind v4 for styling (Tailwind CSS for React Native)
  • TanStack Query for server state
  • Zustand for client state
  • React Native Reanimated 3 for animations
  • Turborepo for monorepo management
  • EAS Build + EAS Update for CI/CD

如果你的网络实践使用Astro而不是Next.js,共享代码策略仍然有效——你只是共享数据层和业务逻辑包而不是React组件。

常见问题

React/Next.js开发人员在React Native中变得有效率需要多长时间? 根据我们培养五名网络开发人员的经验,预期2-3周内基本有效率(可以构建屏幕和实现功能)和2-3个月内我称之为自信独立(可以架构功能、调试原生问题、处理平台特定的边缘情况)。初始学习曲线主要是关于导航模式、移动特定的UX约定以及样式差异。

我可以在Next.js和React Native中使用相同的组件吗? 不直接——呈现原始体系不同(<div><View><span><Text>)。但是,你可以通过自定义钩子共享组件逻辑、共享设计令牌,并使用像Solito或react-native-web这样的库来弥合差距。实际上,我们在平台之间共享40-60%的总代码,主要是业务逻辑和数据层代码。

维护React Native应用的年度成本是多少? 对于典型的中等复杂度应用,预期年度维护成本为$36K-$96K。这包括OS兼容性更新(iOS和Android每年发布主要版本)、依赖关系更新、错误修复、次要功能添加和App Store政策合规。这是客户需要预算的真实成本。

React Native在2026年的生产应用中足够快吗? 是的,绝对。使用新架构(Fabric + TurboModules + JSI)现在成为默认值,React Native应用以60fps一致地实现。像Discord、Shopify Shop和Coinbase这样的应用大规模使用React Native。与原生的性能差距对90%以上的应用类别可以忽略不计。它仍然滞后的地方是繁重的动画或GPU密集的工作负载。

我应该使用Expo还是裸React Native? Expo。这甚至不在2026年的讨论范围内。Expo支持几乎每个原生API,Expo Modules API允许你在需要时编写自定义原生代码,EAS Build消除了原生工具链的麻烦。关于"如果你需要X就从Expo退出"的旧建议已经过时。现在大约85-90%的生产React Native应用使用Expo,包括主要应用。

移动项目的最小可行团队是什么? 两名开发人员和一名理解移动约定的设计师。一名开发人员应该有React Native经验(即使是通过你的内部培训项目)。你可以从那里向上扩展,但在客户移动项目上单独进行是有风险的——需要太多平台特定的知识。对于你的第一个项目,考虑一个兼职React Native承包商作为安全网。

我如何处理应用商店提交和评审? EAS Submit自动化二进制上传流程。但你仍然需要手动管理App Store Connect和Google Play Console以获取元数据、截图、隐私声明和评审响应。Apple的评审流程通常需要24-48小时。由于潜在的拒绝,为首次提交预算1-2周。常见的拒绝原因:缺少隐私政策、身份验证功能不足和不完整的元数据。

如果我们只有5-10名开发人员,提供移动开发是否值得? 绝对值得——这实际上是开始的理想规模。你不需要从第一天起就有专门的移动团队。首先培训你最强的2-3名React开发人员,一次接纳一个移动项目,从那里增长。网络和移动之间的代码共享意味着你的团队没有被分割——他们正在跨平台与共享基础合作。查看我们的定价页面直接联系如果你想讨论类似规模的其他代理机构是如何进行此转变的。