One:Tamagui 出品、用一个 Vite 插件同时产出 Web 与 React Native 的 React 框架

开源
前端
React
React Native
跨端
Vite
2026/9/30
·

阅读时间: 大约 8 分钟

One:Tamagui 出品、用一个 Vite 插件同时产出 Web 与 React Native 的 React 框架

One 官网首页:npx one 一键起步与特性入口

“一套代码同时出 Web 和原生 App”喊了很多年,但真正顺滑的方案一直稀缺。One 是 Tamagui 团队(Copyright 2024 Tamagui, LLC)拿出的回答:一个专注简洁的 React 框架,用单个 Vite 插件同时面向 Web 与原生。本文基于 onestack.dev 官方站点梳理它的机制与取舍。

一、背景:跨端框架的两种老路

过去做跨端 React 应用大致两条路:要么 Web 用 Next.js、原生用 Expo/React Native,两套工程、两份数据层、两套路由;要么用像 Tamagui Takeout 这种”全家桶模板”,把很多约定打包给你,但灵活性受限。One 的作者正是做 Tamagui 与 Takeout、并在 Uniswap 踩过跨端坑的团队,它想把”模板里的最佳实践”固化成一个真正的框架。

二、是什么:一个 Vite 插件包打天下

One 的定位是”最简单、最快、一体化的 React Native 框架”,但它不止做原生。官方一句话概括:一个 Vite 插件,提供全类型化的文件系统路由、按页渲染模式、loader、中间件,以及可投产的 Hono / Vercel / Cloudflare 服务端。起步只需 npx one。

它当前明确标注 Beta——这是引用其成熟度时必须保留的口径。

三、关键能力:按页选渲染、双端同构

官网特性区把卖点列得很清楚:

One 官网特性:按页渲染模式、类型化 loader、Web+Native、Vite 原生可选 bundler

  • 类型化文件系统路由:嵌套布局、路由分组(groups),路由与参数全类型安全;
  • 按页渲染模式(Render Modes):每一页都可以单独指定为 SPA、SSR 或 SSG,同时控制全局默认——不是整个应用一刀切;
  • 类型化 Loader:数据加载器带类型,方便从其他框架迁移;
  • Web + Native:用 React 做网站、用 React Native 做原生 App,或两者同时;
  • Vite-native:原生端也可以只用 Vite 打包,或选择交给 Metro——bundler 由你选。

数据层方面,One 明确不追随 RSC(React Server Components)的复杂度,而是用传统的 SSG/SPA/SSR + loader,或接一个同步引擎(Koala 周报提到它与 ZeroSync 这类同步引擎集成)。

四、关键信息速览

项目官方口径
出品方Tamagui, LLC(源自 Tamagui Takeout 与 Uniswap 的跨端经验)
形态单个 Vite 插件
路由类型化文件系统路由、嵌套布局 + 分组
渲染按页 SPA / SSR / SSG,全局默认可调
服务端可投产的 Hono、Vercel、Cloudflare
双端React(Web)+ React Native(原生)
Bundler原生端可选 Vite 或 Metro
状态Beta

放到跨端框架坐标系里看,One 的位置才更清楚。和 Expo Router 相比,二者都做文件系统路由,但 Expo Router 本质是 React Navigation 在原生侧的延伸,Web 更多是”能跑”的副产物;One 则把 Web 当成与原生平起平坐的一等端,甚至为 Web 提供 Hono/Vercel/Cloudflare 这种可投产服务端。和 Next.js 相比则正好反过来:Next.js 是 Web 优先、原生要另想办法,One 是双端同源。和它自己的前身 Tamagui Takeout 相比,差别在于 Takeout 是一份”照着抄”的模板,而 One 把模板里那些零散约定收敛成一个版本化、可升级的 Vite 插件——这也是它从”模板”升格为”框架”的关键一步。

不过要提醒:以上对比是基于各框架公开定位的横向判断,并非同机 benchmark。One 官方没有给出与 Expo Router、Next.js 在启动速度、包体积或渲染耗时上的量化对比,“更快、更简单”更多是设计取向的自我表述,落地前仍建议用自己的首页路由做一次实测。

再看它的部署模型,这往往是被忽略的分水岭。One 把服务端抽象成可适配 Hono、Vercel、Cloudflare 三种运行时,意味着同一份 loader/中间件代码可以跟着你的托管环境走,而不是被某一家平台绑死;这对小团队是实际的省事。但反过来说,按页选渲染模式的灵活性也带来配置成本——你需要明确决定每个路由是 SSG、SSR 还是 SPA,选错了要么失去 SEO,要么把本可静态化的页面白白压到服务端。官方把”全局默认 + 逐页覆盖”做成了机制,恰恰说明这件事默认做不好:它把决策权留给了你,也就把责任留给了你。

五、优势与局限

优势:

  1. 单插件统一工程:路由、渲染、loader、服务端都收敛在一个 Vite 插件里,少装一堆工具;
  2. 按页渲染:不是全站一种模式,营销页 SSG、后台 SSR、交互页 SPA 可混用;
  3. 双端同构思路:Web 与原生共享路由与数据层,减少重复工程;
  4. 放弃 RSC 换简洁:对不想跟进 RSC 心智的团队,这是明确的减负。

局限(口径与边界):

  1. 仍是 Beta:官方自己标注 Beta,“可投产服务端”不等于整个框架生产就绪,生产采用需评估成熟度;
  2. “一套代码”是理想而非字面:原生端跑的是 React Native 组件,不是 DOM,平台差异与原生模块仍要单独处理;
  3. 刻意回避 RSC:这是一次押注——随着 RSC 成为 React 主流方向,未来可能面临生态分叉;
  4. Tamagui 生态耦合:出身 Tamagui,深度使用可能与其设计体系绑定,独立于该生态的团队需评估锁定风险。

六、谁该关注

  • 已在用 Tamagui / 需要 React Web + React Native 双端的团队:One 把工程收敛做到位;
  • 喜欢 Vite、不想上 RSC的开发者:按页渲染 + loader 的模型直观;
  • 需要一个能同时部署到 Hono/Vercel/Cloudflare 的一体化框架的项目;
  • 追求绝对生产稳定、不愿赌 Beta 框架的核心业务:建议再观察迭代。

参考来源