用了多年 React,Remix 终于“叛变”了:3.0 版本彻底重写
点击查看原文>
Remix,这个由 React Router 背后团队打造的全栈 Web 框架,已经发布了 Remix 3 beta 预览版。这是一次从底层重新构建的版本,将项目从 React 迁移到了 Web 平台原生基础能力之上。
由联合创始人 Michael Jackson 宣布的 Remix 3,将框架重新定位为一个完整的全栈体系,而不再是早期版本所处的“中心栈”(center stack)——仅负责路由和渲染。如今,它将路由、请求处理器、中间件、会话、身份认证、表单、上传、资源、数据和数据库管理、UI 组件、主题、网络以及测试等能力,都纳入统一的 remix 体系之下,并通过小型可组合的软件包构建。目前,该预览版本为 v3.0.0-beta.5,团队表示未来将每周持续发布新版本。
其中许多变化都属于架构层面的调整。路由现在是基于 Fetch API 的路由,控制器返回 Web Response 对象,表单提交到 URL,因此请求生命周期由服务器负责管理。在前端方面,Remix 保留了 JSX,但移除了 React 运行时,转而采用一个基于 Preact 的分支版本以及命令式模型。在这种模型中,状态只是一个普通变量,而调用 this.update() 则表示某些内容发生了变化。
事件系统使用统一的 on 属性,异步任务通过标准的 AbortController 信号进行取消,而服务器驱动 UI 则通过“frames”实现——这是一种带有 src 属性的服务器渲染片段,可以独立加载和重新加载。这种方式被一些观察者认为类似于 HTMX。Remix 还引入了“unbundling”(取消打包)的理念,其中运行时而不是打包器成为事实来源,资源由 Remix 编译并提供服务,而 import 语句不再拥有特殊语义。
社区对此的评价明显分化。在自己的博客中,Alex Kotliarskyi 称 Remix 3 是“Next.js 本该成为的 Grug Brain 版本”,并认为这标志着从函数式编程向命令式编程的钟摆正在摆回。
Kent C. Dodds 则强调了该框架依赖的一项 TypeScript 技巧,即像参数一样对 this 进行类型定义。
Zenn 上的一篇实践评测认为,“单一软件包、接近 Web 标准、显式优于约定”的设计非常适合 AI 辅助编程,不过作者也认为它目前仍处于不适合生产环境的早期阶段。
质疑者则主要关注生态变化带来的成本。一篇在 r/reactjs 中广受关注的讨论认为 Remix 已经“完全无法辨认”,并将其与 Next.js 进行了比较:
……你爱怎么喷 Next.js 都行,它的大版本升级确实经常搞事情,也经常让旧代码崩掉。但至少它一直还是那个做 SSR 的框架。Remix 现在倒好,已经彻底变成另一个东西了,完全看不出以前那个 Remix 的影子……
在 Hacker News 上,一名开发者质疑 Remix 3 相比 React Router 加 Vite 的价值所在,而其他人则指出该团队“因频繁破坏性改动而闻名”。
迁移并不是一次简单的升级。由于 Remix 3 放弃了 React,现有的 Remix 2 应用被引导迁移到 React Router v7 作为后续路线,而 Remix 3 则被定位为一次重新开始,正如《Wake Up, Remix》一文中所描述的那样。早期采用者已经在公开迁移 PR 中记录了完整重写过程。
与 Next.js、SolidStart 和 SvelteKit 相比,Remix 3 是目前最激进的一次押注——选择 Web 标准,而不是框架抽象。开发者现在可以通过以下命令体验它:
npx remix@next new my-remix-app
Remix 是一个开源的全栈 Web 框架,由 React Router 背后的团队创建,并由 Shopify 维护。Shopify 于 2022 年收购了该项目。该项目采用 MIT 许可证发布,源码以及每周发布的 beta 版本均可在 GitHub 上获取。
原文链接:
本文来源:InfoQ