React 框架选择指南:构建全栈与原生应用

Viewed 0

如果你想用 React 构建一个新的应用或网站,推荐从一个框架开始。如果现有框架无法满足需求,你更喜欢构建自己的框架,或者只想学习 React 基础知识,也可以从头开始构建 React 应用。

全栈框架

推荐的框架支持在生产环境中部署和扩展应用所需的所有功能,集成了 React 的最新特性,并充分利用 React 的架构。

需要注意的是,这些全栈框架不一定需要服务器。它们都支持客户端渲染(CSR)、单页应用(SPA)和静态站点生成(SSG),可以部署到 CDN 或静态托管服务。此外,允许根据需求针对特定路由单独启用服务端渲染,这意味着可以从纯客户端应用开始,后续在特定路由上启用服务端功能,无需重写整个应用。具体配置请参考各框架文档。

Next.js (App Router)

Next.js 的 App Router 是一个 React 框架,充分利用 React 架构,支持全栈 React 应用。使用以下命令创建项目:

npx create-next-app@latest

Next.js 由 Vercel 维护,可以部署到任何支持 Node.js 或 Docker 的平台,也支持静态导出无需服务器。

React Router (v7)

React Router 是 React 最流行的路由库,与 Vite 结合可创建一个全栈 React 框架。它强调标准 Web API 并提供多个可部署模板适用于各种 JavaScript 运行时和平台。创建项目命令:

npx create-react-router@latest

React Router 由 Shopify 维护。

Expo (for native apps)

Expo 是一个 React 框架,用于创建支持真正原生 UI 的通用 Android、iOS 和 Web 应用。它为 React Native 提供 SDK,简化原生开发。创建项目命令:

npx create-expo-app@latest

Expo 新手可以参考 Expo 教程。Expo 由 Expo 公司维护,免费使用,应用可提交到 Google 和 Apple 应用商店,还提供可选的付费云服务。

其他框架

还有一些新兴框架正在努力实现全栈 React 愿景:

  • TanStack Start (Beta): 由 TanStack Router 驱动的全栈 React 框架,使用 Nitro 和 Vite 等工具,提供完整的服务端渲染、流式传输、服务器函数等功能。
  • RedwoodJS: 全栈 React 框架,预装许多包和配置,方便构建全栈 Web 应用。

深入探讨:React 全栈架构愿景

哪些特性构成了 React 团队的全栈架构愿景?Next.js 的 App Router 打包器完全实现了官方的 React Server Components 规范,允许在同一个 React 树中混合使用构建时、仅服务器端和交互式组件。

例如,可以编写一个仅在服务器端运行的服务器端 React 组件,从数据库读取数据,然后传递给浏览器中的交互式组件:

// 该组件仅在服务器端运行(或在构建期间运行)。
async function Talks({ confId }) {
  // 1. 在服务器端直接与数据层交互,无需 API 端点。
  const talks = await db.Talks.findAll({ confId });
  // 2. 添加任意渲染逻辑,不会增大 JavaScript bundle。
  const videos = talks.map(talk => talk.video);
  // 3. 将数据传递给将在浏览器中运行的组件。
  return <SearchableVideoList videos={videos} />;
}

Next.js 的 App Router 还集成了使用 Suspense 的数据获取,允许在 React 树中为不同部分指定加载状态:

<Suspense fallback={<TalksLoading />}>
  <Talks confId={conf.id} />
</Suspense>

服务器组件和 Suspense 是 React 的特性,但在框架层面采用需要大量工作。目前,Next.js App Router 是最完整的实现,React 团队正与打包工具开发者合作,以便在下一代框架中更容易实现。

从零开始

如果应用有现有框架无法满足的限制,希望构建自己的框架,或只想学习 React 应用基础知识,可以从零开始启动 React 项目。这提供了更多灵活性,但需要自己选择路由、数据获取等工具,类似于构建自己的框架。推荐框架为这些问题提供了内置解决方案。

如果想构建自己的解决方案,可以参考从零构建 React 应用指南,该指南提供了使用 Vite、Parcel 或 RSbuild 等构建工具设置新项目的说明。

0 Answers