You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在React Native应用中使用Next.js及其路由能力?

核心结论
  • Next.js 本身是面向 Web 场景的 React 框架,原生运行环境是浏览器与 Node.js 服务端,无法直接在纯 React Native 环境中运行,它自带的服务端渲染、RSC 等能力默认只在 Web 端生效。
  • 你了解到的 Expo + Next.js 搭配方案,不是让 Next.js 直接跑在原生端,而是 Expo 做了完整的适配层,让你可以用接近 Next.js 的开发范式写代码,一套代码同时输出 Web 端(走原生 Next.js 运行时)和原生端(走 React Native/Expo 运行时),路由、业务逻辑、通用组件可以最大程度复用,不是只能做 Web。
路由体验对齐说明

你偏好的 Next.js 文件系统路由设计,在这套适配方案里是完全对齐的,体验比手写 React Navigation 配置顺很多:

  • 统一用 app/ 作为路由根目录,文件夹嵌套直接对应路由层级,page.tsx 对应路由页面、layout.tsx 对应嵌套布局、loading.tsx/error.tsx 等约定式文件的行为和 Next.js 完全一致
  • 原生端底层会自动把这套文件路由规则映射为 React Navigation 的导航栈,不需要手动写 Stack、Tab 导航的配置,路由传参、嵌套导航、深链跳转等原生能力默认支持,开发时几乎感知不到底层 React Navigation 的存在
  • Web 端直接走 Next.js 原生 App Router 逻辑,路由预加载、缓存等优化能力全部可用,没有额外适配成本
特性复用边界

不要期待 Next.js 所有能力都能在原生端生效,具体可以分成三类:

  • 跨端全生效:约定式文件路由、嵌套布局、路由预加载、统一的图片/字体加载API、环境变量约定、元数据配置(原生端会自动映射为导航栏标题、深链元信息)
  • 仅Web端生效:React Server Components、服务端渲染/静态生成、Server Actions、Next.js内置API路由、Edge Runtime等依赖服务端/浏览器环境的能力,原生端运行时会自动跳过这部分逻辑,不会抛错
  • 平台差异化逻辑可以通过 .native.tsx/.web.tsx 文件后缀拆分,比如同一个路由,Web端用RSC取数,原生端用客户端请求取数,路由层不需要做任何改动
底层运行逻辑

这套方案的运行逻辑其实很简单,很多人困惑是因为误以为Next.js要跑在原生环境里:

  1. 你只需要维护一套放在 app/ 目录下的路由和业务代码
  2. 执行原生端启动命令调试时,打包工具会识别文件路由规则,自动生成React Navigation的导航配置,最终打包为原生App运行的代码,这时候Next.js本身的代码不会被打包进原生安装包
  3. 执行Web端启动命令调试时,代码会直接走Next.js的编译流程,输出标准的Next.js Web应用,所有Next.js的Web端能力全部正常可用
  4. 通用组件、工具函数、业务逻辑代码两端共用,平台差异部分用文件后缀或者Expo提供的平台判断API拆分即可
实践建议
  • 如果你只做纯React Native应用,没有Web端需求,完全没必要硬搭Next.js适配层,直接用Expo Router就行——Expo Router本身就是完全对齐Next.js App Router设计的原生路由方案,API和Next.js几乎一致,不带Next.js相关依赖,原生端包体积和运行体验更轻量
  • 如果你确实有Web+原生跨端需求,直接用Expo官方初始化工具创建带Next.js适配的模板即可,路由、构建配置都已经预置完成,不需要手动折腾适配
  • 公共代码里不要直接写依赖浏览器DOM或者Node.js API的逻辑,否则原生端运行时会报错

内容的提问来源于stack exchange,提问作者Gus Threlfall

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 23:45:54