使用服务器操作实现渐进增强
使用服务器操作构建无需 JavaScript 即可运行的表单,并在 JS 加载后通过 React 增强它们
使用服务器操作实现渐进增强 是 CoddyKit 上的免费 React Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 React Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 React Academy 课程共包含 4 节课。
什么是渐进增强
渐进增强是一种网页开发策略:先构建一个可用的 HTML 基线,再在其上逐层添加 JavaScript 功能。核心功能对所有用户都可用,包括禁用了 JavaScript、网络连接缓慢或使用辅助技术的用户;启用 JavaScript 的用户则能获得增强的体验。
无 JavaScript 基线
即使没有 JavaScript,使用 action={serverAction} 的表单也能作为整页 HTML POST 正常工作。浏览器提交表单,服务器执行操作,然后返回更新后的 HTML 页面。这与自 1995 年以来一直为网页表单提供支持的机制相同,React 的服务器操作在设计上与其兼容。
无 JS 时的服务器端验证
当没有 JavaScript 时,验证必须在服务器上进行。服务器操作会验证表单数据;如果验证失败,就会返回错误状态。服务器会在 HTML 中嵌入错误消息并重新渲染页面。用户无需运行任何客户端 JavaScript 就能看到错误。
JavaScript 增强层
当 React 对页面完成水合后,它会拦截表单提交,将其作为异步服务器操作调用处理,而不是执行整页 POST。用户可以在不重新加载页面的情况下获得原地更新、可见的等待状态和乐观界面,同时底层操作和表单结构都无需改变。
水合安全模式
服务器会将初始状态嵌入 HTML,并据此渲染表单。React 完成水合时,会直接接收这个初始状态,不会引发闪烁或不匹配。useActionState 钩子经过专门设计,可以顺畅地协调服务器渲染的初始状态与客户端水合。
带来即时感的 React 过渡
React 过渡允许界面在服务器操作调用期间继续保持交互。将表单提交包装在过渡中后,React 可以降低服务器往返的优先级,同时保持页面响应。这正是经过 JavaScript 增强的体验比整页重新加载明显更快的原因。
用户体验对比
没有 JavaScript 时:用户点击提交,浏览器发送完整的 POST,服务器返回新的 HTML 页面(期间会短暂出现白屏,并重置滚动位置)。有 JavaScript 时:React 进行拦截,操作异步执行,页面中只有发生变化的部分在原处更新,不会闪烁,也不会重置滚动位置。
搜索引擎索引
渐进增强有利于搜索引擎爬虫,因为爬虫可能不会执行 JavaScript。以表单驱动的搜索页或筛选页如果能作为整页 HTML 表单正常工作,就可以被索引和抓取。服务器渲染的结果意味着爬虫看到的是真实内容,而不是等待 JavaScript 填充的空 div。
无障碍方面的好处
屏幕阅读器和辅助技术在语义化 HTML 下的工作效果最佳。渐进增强的表单使用真正的 <form>、<input> 和 <button> 元素,辅助技术可以原生理解这些元素。JavaScript 会为错误播报添加 ARIA 实时区域,从而增强而不是取代原本就具备无障碍能力的基线。
低连接质量与网络韧性
在不稳定的网络环境中,JavaScript 代码包可能无法加载。经过渐进增强的页面仍然能够完成基本使用场景。这种韧性对于在覆盖较差地区使用移动网络的用户尤其重要,也适用于网络状况变化剧烈的地区。
何时应用渐进增强
渐进增强对于面向公众的表单最有价值,例如注册、联系、搜索和结账表单。具有复杂交互功能的内部控制面板可能不需要它。请在最大覆盖范围和可靠性很重要的地方有意识地采用它,例如营销页面、电子商务页面和用户引导流程。
渐进增强的定义
渐进增强的核心原则是什么?
课程回顾
渐进增强意味着表单无需 JavaScript 也能作为普通 HTML POST 工作。服务器操作原生支持这一点:action={serverAction} 可以启用整页 POST 提交。随后,React 的水合会将表单升级为异步的原地更新,并提供等待状态。这种方式既能惠及无障碍、SEO 和低连接质量场景下的用户,同时仍能提供丰富的 JavaScript 体验。
常见问题解答
「使用服务器操作实现渐进增强」课时是免费的吗?
是的 — 「使用服务器操作实现渐进增强」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 React Academy 课程的其余内容,请升级到 CoddyKit PRO。 React Academy 课程共包含 4 节课。
「使用服务器操作实现渐进增强」这节课中我会学到什么?
使用服务器操作构建无需 JavaScript 即可运行的表单,并在 JS 加载后通过 React 增强它们 你通过在浏览器中直接运行的动手代码来练习 React Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 React Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 React Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「使用服务器操作实现渐进增强」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 React Academy 课中编写并运行代码吗?
能。每节 React Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。