350 多次提交之后,Remix 3 不带 React 了——一个「React 元框架」把自己重写成了独立全栈框架

先给结论:Remix 3 的 Release Candidate 已经发了,而这次最大的变化只有一个——它不再是「基于 React 的全栈框架」了。以前你在 Remix 里写 React 组件、用 React Router 的路由,整个框架的根扎在 React 上;现在 Remix 自己处理路由、自己处理数据加载、自己处理渲染,React 只是你可以选用的一种 UI 方案,不再是框架的地基。官方给这个版本打了 350+ 次提交,定位是「ground-up rethinking of full-stack web development」——不是改进,是重写。

这事为什么值得前端架构层面单独拎出来讲?因为「元框架正在脱离它们绑定的 UI 框架」正在变成 2026 年一条清晰的主线。React 有 Next.js,Vue 有 Nuxt,这两个都是「框架绑死在某个 UI 库上」的典型;Remix 这次反向走,把自己从「React 的 Remix」变成「Remix 自己」。对做技术选型的人来说,这意味着全栈方案里第一次出现了一个「不绑定特定 UI 层」的成熟候选。

先说它为什么敢拆 React。官方在博客里对退 React 的理由讲得很直白:Server Components 那套架构把复杂度拉得太高;React 本身的体积带来明显负担;hydration 的开销持续影响性能;最要命的是演进路线被 React 的节奏牵着走——框架自己的方向,不能由别人的发布计划决定。注意官方还提到一个细节:AI 参与了 Remix 3 的设计与实现,包括从海量项目的用法模式里做分析、模拟替代架构、生成 API 原型、自动化测试开发体验。这也是它在 README 里把「Model-First Development」写进原则的原因——源码、文档、工具链、抽象层都按 LLM 来优化,而不是把模型只当写代码的工具。

再说它换成了什么。Remix 3 带上了自己的一套 UI 运行时,响应式原语从 hooks 换成了 signals:

“`js
// 原生响应式状态
import { signal, computed, effect } from ‘remix/signals’;

export function Counter() {
const count = signal(0);
const doubled = computed(() => count.value * 2);
effect(() => {
console.log(`Count changed to: ${count.value}`);
});
return (

Count: {count.value}

Doubled: {doubled.value}


);
}
“`

信号是细粒度更新,比「整棵树重渲染 + 对比 diff」更接近问题的本质。服务端函数也顺带简化了,直接用 `’use server’` 标注,校验和重定向都能写在同一个函数里:

“`js
‘use server’;
export async function createUser(formData) {
const name = formData.get(‘name’);
const email = formData.get(’email’);
if (!name || !email) {
return { error: ‘Name and email are required’ };
}
const user = await db.users.create({ data: { name, email } });
return redirect(`/users/${user.id}`);
}
“`

流式渲染这次是一等公民,关键数据阻塞、非关键数据 defer,不用自己搭一层 Suspense 脚手架:

“`js
import { Suspense, defer } from ‘remix’;

export function loader() {
return defer({
user: db.users.findFirst(), // 关键数据,阻塞渲染
posts: db.posts.findMany({ take: 10 }), // 延迟,走流式
analytics: fetchAnalytics(),
});
}

export default function Dashboard() {
const { user, posts, analytics } = useLoader();
return (

Hello, {user.name}

<Suspense fallback={

Loading posts…

}>

<Suspense fallback={

Loading analytics…

}>

);
}
“`

但真正让架构师该盯着看的,不是这些 API,而是**数据库工具链**。这次 Remix 3 把数据库的生命周期管理当成了显式的操作接口:migrations、seeding、status 检查、reset、wipe、rollback,全部进 CLI。也就是说 `remix db rollback` 是一条正经命令,不用再去 README 里考古、翻六个散落的 package script。社区里有句话点得很准:数据库状态是 API,不是 agent 的支线任务——一个没有一等公民「数据库状态命令」的应用,本质上是不可部署的。迁移文件写得再漂亮也没用,只要线上库比你多跑了三次重试、一次半截子的 seed、外加一个忘记的热修复,一切就错位了。把存储层当成可查询、可回滚的系统边界,这是 Remix 3 在工程化上最实在的一步。

配套的还有:schema 校验、type-safe 路由、不带打包器的 asset server(unbundled asset server,浏览器按原生方式加载资源),以及全栈 HMR——`npm run hmr` 就能在保留组件状态的前提下热更服务端模块和 UI 组件。这些凑在一起,Remix 3 是一个「单软件包」的全栈方案:路由、数据、渲染、资源、数据库,一个 remix 包全给你。

那它到底适不适合你现在动?我的判断是这样的:

– **适合看的人**:正在做全栈框架选型、又不想被某个 UI 库锁死的团队,Remix 3 第一次给了你一个不绑定 UI 层的成熟候选。
– **适合等的人**:生产项目别急着上,RC 就是 RC。官方说 10 月 2 号在 Remix Jam 正式发 3.0,等稳定版落地、周边生态和部署方案跟上再评估更稳。
– **适合现在做的事**:把它当一次架构参考读。signals 取代 hooks、数据库生命周期进 CLI、unbundled asset server、全栈 HMR,这几个方向无论你用不用 Remix,都会在未来一两年的框架里反复出现。抽两个小时跑一遍脚手架,比读十篇二手解读有用。

最后落一个可执行的下一步:如果你手头有「React 元框架 + 一堆散落脚本管数据库」的项目,这周先做一件事——把数据库的 migrate / status / rollback 抽成显式命令,别管用哪套框架。这件事本身就是 Remix 3 这波重写里,最不挑技术栈、收益最确定的一条。

评论区

0 条评论

登录后可评论。

阿柯·前端架构 10 阅读