一起深入盘点 2025 年 React 发展的 10个趋势?

大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!

1.React 服务器组件

React 服务器组件 (React Server Components) 方面取得了长足进步,该规范的第一个实现在 Next.js 13 中被引入,该规范于 2022 年 10 月 25 日在 Next.js Conf 上宣布。此版本标志着 App Router(app/ 目录)的开始,其完全采用了 RSC。

尽管 Next.js 13 (2022) 和 14 (2023) 一直是推动 RSC 的主要引擎(并且由于大胆引入该技术而收到很多负面反馈),但 Next.js 15 (2024) 为大众带来了更稳定的 RSC 。

2025 年很可能将是 React Server Components 成为 React 生态标准原语的一年,因为 React Router( 以前的 Remix)和 TanStack Start 也有望在其即将发布的版本中采用 RSC。

import db from "./database";
async function Note({id}) {
  // NOTE: loads *during* render.
  const note = await db.notes.get(id);
  return (
    <div>
      <Author id={note.authorId} />
      <p>{note}</p>
    </div>
  );
}
async function Author({id}) {
  // NOTE: loads *after* Note,
  // but is fast if data is co-located.
  const author = await db.authors.get(id);
  return <span>By: {author.name}</span>;
}

React 服务器组件 (RSC) 通过仅在服务器上执行一次,并将渲染的标记(而非 JavaScript)发送到客户端。其减少了客户端 JavaScript 包的大小,同时允许直接访问数据库、API 和后端逻辑,且无需将其暴露给浏览器。

RSC 可以与客户端组件一起工作,让开发者通过将繁重的逻辑保留在服务器上来优化性能,同时在需要时仍能实现交互。

2.React 服务器函数

React 服务器操作 (React Server Actions,RSA) 是作为 React 服务器组件的演进而引入的,其允许组件调用服务器函数来简化变更(例如:表单提交、数据库更新),为开发者提供类似于远程过程调用 (RPC) 的体验,而无需手动定义 API 路由。

"use server";
export async function updateName(name) {
  if (!name) {
    return {error: "Name is required"};
  }
  await db.users.updateName(name);
}
"use client";
import {updateName} from "./actions";
function UpdateName() {
  const [name, setName] = useState("");
  const [error, setError] = useState(null);

  const [isPending, startTransition] = useTransition();

  const submitAction = async () => {
    startTransition(async () => {
      const {error} = await updateName(name);
      if (error) {
        setError(error);
      } else {
        setName("");
      }
    });
  };
  return (
    <form action={submitAction}>
      <input type="text" name="name" disabled={isPending} />
      {error && <span>Failed: {error}</span>}
    </form>
  );
}

然而,虽然 RSC 改善了数据获取的开发者体验 (DX),RSA 简化了变异(数据变更),但在客户端组件中获取数据依然棘手。例如,在 Next.js 中,开发者必须自定义 API 路由来获取客户端组件的数据,从而与 RSC 和 RSA 改进的 DX 不一致。

一个临时的解决方法是使用 React Server Actions 在客户端组件中获取数据,尽管这种方法有一些缺点。

可喜的是, 2024 年 9 月 React 团队官宣支持 React Server Functions (RSF) 作为在服务器组件和客户端组件中获取和变异数据的总称,而 RSA 只是用于变异数据的 RSF 的子集。

服务器函数(RSF) 允许客户端组件调用在服务器上执行的异步函数

当使用 “use server” 指令定义服务器函数时,框架将自动创建对服务器函数的引用,并将该引用传递给客户端组件。当在客户端调用该函数时,React 将向服务器发送请求以执行该函数并返回结果。

服务器函数 可以在服务器组件中创建并作为 props 传递给客户端组件,也可以在客户端组件中导入和使用。

// 服务器组件
import Button from "./Button";
function EmptyNote() {
  async function createNoteAction() {
    // 服务器组件使用 "use server" 指令声明服务器函数
    "use server";
    await db.notes.create();
  }
  return <Button onClick={createNoteAction} />;
}

值得注意的是,目前还没有一个 React 框架实现 React Server Functions(尚未进入测试阶段),但可以预期其很可能在 Next.js、TanStack Start 和 React Router 的未来版本中引入。

3.React Forms 的优化

React 19 于 2024 年底发布,为 React 生态带来了许多改进。虽然 React Server Components 和 React Server Functions 是该版本的核心,但 React Forms 也值得关注。

React Forms 最大的变化是 <form> 元素上的 action 属性,其允许开发者指定在提交表单时应调用的服务器 Action。

import {updateCart} from "./lib.js";
function AddToCart({productId}) {
  async function addToCart(formData) {
    "use server";
    const productId = formData.get("productId");
    await updateCart(productId);
  }
  return (
    <form action={addToCart}>
      // form 支持 action 属性
      <input type="hidden" name="productId" value={productId} />
      <button type="submit">Add to Cart</button>
    </form>
  );
}

React 19 还引入了新的 Hooks,例如: useFormStatus、useOptimistic 和 useActionState 等,主要专注于管理表单及其客户端交互。

import {useFormStatus} from "react-dom";
import {submitForm} from "./actions.js";

function Submit() {
  const {pending} = useFormStatus();
  // 要在提交表单时显示 pending 状态
  // 开发者可以调用 <form> 中渲染的组件中的 useFormStatus Hook 并读取 pending
  return (
    <button type="submit" disabled={pending}>
      {pending ? "Submitting..." : "Submit"}
    </button>
  );

function Form({action}) {
  return (
    <form action={action}>
      <Submit />
    </form>
  );
}
export default function App() {
  return <Form action={submitForm} />;
}

有了这些新功能,React 中的表单处理变得更加强大和灵活。

4.React 框架的全新发展

虽然 Next.js 目前是最流行的 React 框架,但其他框架很可能会在 2025 年获得新的关注,例如:TanStack StartReact Router

React Router v7 是 Remix 继 v2 之后的下一个主要版本,如果已启用所有 Remix v2 未来标志,则从 Remix v2 升级到 React Router v7 则主要只涉及更新依赖项。

虽然 TanStack Start 在很大程度上构建在 TanStack Router 之上,属于新产品,但 React Router 是一个成熟的库,在 Remix 沉寂了一段时间后正在演变成一个成熟的前端框架。

import {type RouteConfig} from "@react-router/dev/routes";
import {remixRoutesOptionAdapter} from "@react-router/remix-routes-option-adapter";

export default remixRoutesOptionAdapter((defineRoutes) => {
  return defineRoutes((route) => {
    route("/", "home/route.tsx", { index: true});
    route("about", "about/route.tsx");
    route("","concerts/layout.tsx", () => {
      route("trending", "concerts/trending.tsx");
      route(":city", "concerts/city.tsx");
    });
  });
}) satisfies RouteConfig;

这两个框架在 React Server Component 和 Server Function 支持方面仍处于早期,但有可能成为 React 生态的主要参与者,并提供 Next.js 的替代方案。

5. 全栈 React

服务器驱动的 React 功能,例如: React Server ComponentsReact Server Functions 的兴起为使用 React 的全栈 Web 应用铺平了道路,而且趋势非常突出。

但在 RSC 和 RSF 中访问数据库只是一个开始,全栈 Web 应用需要完整的后端基础设施,包括:身份验证、授权、消息队列、电子邮件服务 等等。

然而,虽然后端服务对于全栈应用至关重要,但客户端与服务器之间的通信仍至关重要,即使像 React Server Functions 这样的远程过程调用。因此,2025 年很可能看到更简化的验证和 HTTP 状态代码处理的用户体验。

6. React 与 Shadcn UI

近年来,Shadcn UI 已成为 React 项目的标配,就像 Tailwind CSS 一样。其 通过预设但支持组件自定义 的方式,在便利性和灵活性之间取得了平衡,使其成为不受传统库限制的开发者的首选。

import {Terminal} from "lucide-react";
import {Alert, AlertDescription, AlertTitle} from "@/components/ui/alert";

export function AlertDemo() {
  return (
    <Alert>
      <Terminal className="h-4 w-4" />
      <AlertTitle>Heads up!</AlertTitle>
      <AlertDescription>
        You can add components to your app using the cli.
      </AlertDescription>
    </Alert>
  );
}

该趋势标准化了现代 React 样式,但随着大部分项目的趋同,下一个大型 UI 库很可能呼之欲出。

6. React 和 AI 的融合

AI 和 React 的交集主要包括两个方面:

  • React 代码被广泛用于训练 AI 模型。因此,像 v0 这样的 AI 工具正在生成 React 代码,且可以非常容易地将其集成到项目中。
  • 随着 React 通过 RSC 和 RSA 演变为全栈框架,其正在成为构建 AI 驱动应用的理想选择。 Vercel 的 AI SDK 和 LangChain 等库进一步增强了 React 开发复杂 AI 解决方案的能力。
import {generateText} from "ai";
import {openai} from "@ai-sdk/openai";
const {text} = await generateText({
  model: openai("o3-mini"),
  prompt: "What is love?",
});

7.React 的工具链 Biome

设置 ESLint 和 Prettier 让很多开发者如芒刺背,尤其是在协同场景,但其又是 Web 开发者必不可少的工具。Biome(前身为 Rome)旨在通过快速、一体化的工具链解决方案简化这一过程。

{
  "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json",
  "vcs": {
    "enabled": false,
    "clientKind": "git",
    "useIgnoreFile": false
  },
  "files": {"ignoreUnknown": false, "ignore": [] },
  "formatter": {"enabled": true, "indentStyle": "tab"},
  "organizeImports": {"enabled": true},
  "linter": {
    "enabled": true,
    "rules": {"recommended": true}
  },
  "javascript": {"formatter": { "quoteStyle": "double"} }
}

另一个有前途的替代方案是 oxc。

Biome 因在 Rust 中创建性能更高的格式化程序而获得了 Prettier 的 20,000 美元赏金,但是开发者是否会广泛采用还有待观察。

各种论坛(例如: Next.js)都在讨论如何减少对 ESLint 的严格依赖并允许使用其他 linter,而 Biome 就是热门候选。

8. React 编译器

很多 React 开发者都对 useCallback、useMemo 和 memo 等方法爱又恨。虽然 React 需要明确的性能优化,但其他框架却选择默默在背后完成一切。

import reactCompiler from "eslint-plugin-react-compiler";

export default [
  {
    plugins: {
      "react-compiler": reactCompiler,
    },
    rules: {
      "react-compiler/react-compiler": "error",
    },
  },
];

React 团队开发了一个 React Compiler,以自动化 React 应用程序中的所有缓存。该编译器旨在消除 手动缓存函数(useCallback)、值(useMemo)和组件(memo) 的需要。React 将自动处理这些优化,减少每次渲染时重新计算的需要。

截至今天,开发者可以试用测试版的 React Compiler。

参考资料

声明:文章主体框架参考 Robin Wieruch 编写的文章《React Trends in 2025》,但是加了部分自己的理解。

https://react.dev/reference/rsc/server-components

https://www.robinwieruch.de/react-trends/

https://react.dev/reference/rsc/server-functions

https://www.robinwieruch.de/next-server-actions-fetch-data/

https://react.dev/reference/react-dom/components/form

https://www.robinwieruch.de/react-tech-stack/

https://react.dev/learn/react-compiler

https://www.tristatetechnology.com/blog/future-of-reactjs-trends-innovations

原文链接:,转发请注明来源!