工作原理

使用 Inertia,您可以像以往一样使用您选择的服务器端 Web 框架构建应用程序。您可以使用框架现有的功能来进行路由、控制器、中间件、身份验证、授权、数据获取等。

但是,Inertia 会替换应用程序的视图层。您不再使用 PHP 或 Ruby 模板进行服务器端渲染,而是使用 JavaScript 页面组件返回应用程序的视图。这使您能够使用 React、Vue 或 Svelte 构建整个前端,同时仍然享受 Laravel 或您首选的服务器端框架的生产力。

正如您所料,仅仅用 JavaScript 创建前端并不能为您提供单页应用程序体验。如果您点击一个链接,您的浏览器将进行完整的页面访问,这将导致您的客户端框架在后续页面加载时重新启动。这就是 Inertia 改变一切的地方。

从本质上讲,Inertia 只是一个客户端路由库。它允许您进行页面访问,而无需强制进行完整的页面重新加载。这是通过使用 <Link> 组件实现的,该组件是普通锚链接的轻量级包装器。当您点击 Inertia 链接时,Inertia 会拦截点击并通过 XHR 进行访问。您甚至可以使用 JavaScript 中的 router.visit() 以编程方式进行这些访问。

当 Inertia 进行 XHR 访问时,服务器会检测到这是一个 Inertia 访问,并且不会返回完整的 HTML 响应,而是返回一个 JSON 响应,其中包含 JavaScript 页面组件名称和数据(props)。然后,Inertia 会动态地用新的页面组件替换之前的页面组件,并更新浏览器的历史记录状态。

最终结果是丝般顺滑的单页体验。 🎉

要了解有关 Inertia 在幕后工作原理的更多技术细节,请查看 协议页面