到了现代 Rails,前端交互这一层最值得建立的心智不是“要不要立刻上 React”。
而是先理解官方主线:
服务器继续产 HTML
浏览器只做局部更新与轻交互增强这就是 Hotwire 的核心味道。
其中 Turbo 很重要:
Turbo Drive:页面导航更快,减少整页重载感Turbo Frames:把页面切成可独立刷新的局部区块Turbo Streams:服务器直接发“插入、替换、删除某块 HTML”的指令
举个最有 Rails 味的例子。
新增许可单后,不一定非要整页重刷。
控制器:
def create
@permit = Permit.new(permit_params)
if @permit.save
respond_to do |format|
format.html { redirect_to permits_path, notice: "许可单已创建。" }
format.turbo_stream
end
else
render :new, status: :unprocessable_entity
end
end对应的 create.turbo_stream.erb:
<%= turbo_stream.prepend "permits", partial: "permits/permit", locals: { permit: @permit } %>页面里的列表容器:
<div id="permits">
<%= render @permits %>
</div>这套心智特别像什么?
像工务署说:
“别拆整个大厅重建,
只把新办好的这一块公告牌插进去。”这和很多 SPA 的脑回路差异很大。
SPA 常见路线是:
后端给 JSON
前端自己重建页面状态Turbo 路线更像:
后端直接发新的 HTML 片段
前端负责把这块贴到正确位置如果你只是做:
- 中后台
- 表单密集系统
- 列表增删改查
- 局部弹窗、筛选、切片展示
- 实时局部更新
Hotwire 往往比“全量前端状态管理大工程”更省事。
Stimulus 则是轻量行为层,适合:
- tab 切换
- 展开收起
- 表单联动
- 复制按钮
- 简单组件行为
它不是来接管整个前端宇宙的。
它像大厅里的局部电工。