前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >面试中的路由问题

面试中的路由问题

作者头像
不作声
发布2020-07-21 10:52:13
1.3K0
发布2020-07-21 10:52:13
举报
文章被收录于专栏:M不作声

面试题中的路由部分

路由最初是出现在后端中,后端根据不同的路由返回不同的页面,后来随着单页面应用(SPA)诞生,前端也出现了路由,实现了不用刷新页面就可以更新页面的效果。

什么是路由

简单的说,路由就是URL到函数的映射。路由的本质是监听URL的变化,然后匹配路由规则,显示相应的页面。

Router和Route

在React-Router中,路由使用基本如下所示。

代码语言:javascript
复制
<Router>
  <Route path="/" component={Index} />
  <Route path="/hello" component={Hello}/>
  <Route path="/404" component={Error}/>
  ...
</Router>

每一条<Route>就是一条路由,其中包括当前路径和映射的URL。<Router>类似一个容器,里边包裹着一条条的路由。

服务端路由

服务器端会接受到客户端的http请求,根据请求中的URL,找到响应的映射函数,然后执行该函数,向返回的值发送给客户端。

在Express中如下:

代码语言:javascript
复制
app.get('/', (req, res) => {
  res.sendFile('index')
})

客户端路由

在客户端,路由的映射函数通常是进行一些DOM的显示和隐藏操作。目前前端的实现方式有两种,Hash模式和History模式

  • Hash模式。在url中的#及后边的部分是hash,向服务端发送请求的时候,hash部分不会发送出去。
  • History模式。主要使用history.pushStatehistory.replaceState改变URL。

两种方法的比较:

  • Hash模式只更改#后的内容,History可以通过API设置任意的同源URL;
  • History模式可以通过API添加任意类型的数据到历史记录中,Hash模式只能更改字符串;
  • Hash兼容性更好,History更加正式;
  • Hash无需后端配置,History需要配置index.html用于匹配不到资源的时候(返回index)页面。

动态路由

上边所以说的都是静态路由,除此之外还有动态路由。比如,当我们登陆github时,url是https://www.github.com/Bzsheng。人家肯定不可能为每个用户创建一条路由,这时候就是创建一条动态的路由,形如/:id来实现的,当我登陆的时候,将参数Bzsheng传递过去,从而获取到页面。

Express中:

代码语言:javascript
复制
app.get('/user/:id', (req, res) => {
  ...
})

Next.js中:

代码语言:javascript
复制
// page/posts/[id].js
export function getStaticPaths { ... }
export function getStaticProps({ params }) { ... }

React-Router中:

代码语言:javascript
复制
<Router>
  <Route path="/user/:id" />
</Router>

下次准备做一个next项目,做完会上传到github上。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020.07.19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 面试题中的路由部分
    • 什么是路由
      • Router和Route
        • 服务端路由
          • 客户端路由
            • 动态路由
            相关产品与服务
            容器服务
            腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档