什么是客户端路由以及它如何使用?
客户端路由与服务器端路由相同,但是在浏览器中运行。
在典型的Web应用程序中,有几个页面映射到不同的URL,并且每个页面都有一些逻辑和一个模板,然后进行渲染。
客户端路由只是在浏览器中运行此过程,使用JavaScript进行逻辑处理,并使用一些基于JavaScript的模板引擎或其他方法来渲染页面。
通常在单页应用程序中使用,其中服务器端代码主要用于通过Ajax提供给客户端代码使用的RESTful API。
好了,但是浏览器对每个路由都发出请求(除非使用#routing)...那么这是如何工作的?服务器是否以404作为响应,然后路由接管这一点?
...也许它不会向服务器请求URL,而是路由库拦截它-在我的某个应用程序的开发工具中查找,似乎没有向服务器发送路由请求。
什么是客户端路由以及它的使用方式?
在传统的网页应用中,当用户点击一个锚点标签时,浏览器会向服务器发送一个请求,然后加载一个新的页面。但是,通过使用"event.preventDefault();",我们可以拦截这个事件并阻止浏览器发送请求到服务器。通过这种方式,我们可以实现客户端路由(Client-Side Routing,CSR),在不刷新整个页面的情况下,动态加载不同的内容。
下面的代码片段是React Router官方网站上的一个示例:
{ // 阻止浏览器改变URL并请求新文档 event.preventDefault(); // 将一个条目推入浏览器历史堆栈并改变URL window.history.pushState({}, undefined, "/contact"); }} />
除了拦截锚点标签的点击事件外,我们还需要监听浏览器前进和后退按钮的点击事件,可以通过以下代码实现:
window.addEventListener("popstate", () => { // URL发生变化! });
通过上述两个代码片段,你可以想象出如何实现客户端路由。当然,实际的实现要复杂得多,这就是为什么存在像React Router这样的库和像Angular这样的Web框架提供默认的客户端路由功能。
如果你想了解更多信息,请访问以下链接,它将带你进入React Router的概念页面:
[https://reactrouter.com/docs/en/v6/getting-started/concepts](https://reactrouter.com/docs/en/v6/getting-started/concepts)
此外,如果你想深入了解这个主题,你可以查看Angular路由器的代码。比较这两种实现方式将能更深入地理解客户端路由的原理。