首页 > 其他分享 >React 中 Router的相关面试题

React 中 Router的相关面试题

时间:2023-05-03 09:33:05浏览次数:51  
标签:面试题 React state props 组件 Router 路由 history

一、 请你说说react的路由是什么?
React的路由是纯前端的路由,就是根据hash或browser path的变化,框架内封装好了方法,可以自由的切换DOM展示,来模拟页面或局部页面被替换的目的;让浏览器不用刷新,也能获取想要的页面结构,保存内存数据,提升用户体验

 

二、React-Router 实现原理?

当url发生变化时,路由通过监听url的变化,我们不仅能直接获取和解析url路径,并且通过路由匹配,展示相对应地组件,即React组件的展示,授权路由进行控制,保证了url和视图的同步。

 

 

三、React-Router的路由的几种模式

1.BrowserRouter:浏览器的路由模式,开发中最常用的模式,用 pushState 和 popState 事件构建路由
2.HashRouter:在路径前加一个#号成为一个哈希值,Hash模式的好处就是刷新网页仍然能找到对应的路径,用 hash 和 hashchange 事件构建路由,使用的方法有 go(), replace(), push()等,
3.MemoryRouter:不存储History,所有路由保存在内存里,不能前进后退,因为地址栏没有发生任何变化
4.NativeRouter:配合ReactNative使用,多用于移动端
5.StaticRouter:静态路由,需要和后台服务器配合设置

 

四、React 路由跳转的几种方式?

1. params形式

函数组件-传参

1 2 3 4 5 6 7 8 import React from 'react' import { useHistory } from 'react-router-dom' export default ()=> {     const history = useHistory()     // 页面跳转方法     history.push({pathname: '/personal', search: 'test=22222'})       history.push({pathname: '/personal',state: 'test=22222'})

    return123

}

函数组件-接受参数

1 2 3 4 5 6 7 8 import React from 'react' import { useLocation } from 'react-router-dom' export default ()=> {     const location = useLocation()     // 页面跳转方法     console.log(location, 'props')     return 123 }

2. Link形式

 

Llink上携带传递的参数, 携带的参数以对象形式

1 2 3 4 5 <Link to={             { pathname: "/XXX", //xxx为跳转到的路径               state: { title: this.state.exam.title, actionCode: this.state.exam.actionCode }              }           } >切换考试科目 <i className="iconfont icon-jiantou"></i></Link>

类组件-接受参数

1 2 3 componentDidMount() {         console.log(this.props.location.state.XXX);   //xxx指state对象中的键名         }

函数组件-接受参数

1 2 3 4 5 6 function Fast(props) {      ...     useEffect(() => {         console.log(props.location.state.XXX);//xxx指state对象中的键名     }) }

3. url传参

1.传参

<Route exact path="/detail/:id" component={Detail}></Route>   2. 接受参数 类组件:通过 this.props.match.params 获取 函数式组件:const params = useParams();   4.  1. 传参 this.props.history.push({     pathname: '/detail'//要跳转到的路径     state: {  //参数地址栏不显示,刷新地址栏,参数不丢失       id: 456     }   })} this.props.history.push({     pathname: '/detail'//要跳转到的路径     query: {  //参数地址栏不显示,刷新地址栏,参数不丢失       id: 456     }   })}

2. 接受参数

    this.props.history.location.state

    this.props.history.location.query

 

 

 

五、React-Router的<Link>标签与<a>标签有什么区别

Link 组件最终会渲染为 HTML 标签 <a>,它的 to、query、hash 属性会被组合在一起并渲染为 href 属性。虽然 Link 被渲染为超链接,但在内部实现上使用脚本拦截了浏览器的默认行为,然后调用了history.pushState 方法。

Link 只负责触发 url 变更,Route 只负责根据 url 渲染组件

相比于 <a> 标签,<Link> 避免了不必要的渲染

 

六、在history模式中push和replace有什么区别?

push(''):添加一个新的记录到历史堆栈, history.length+1。(一般会用来跳转到一个新页面, 用户点击浏览器的回退按钮可以回到之前的路径。)
replace(''):替换掉当前堆栈上的记录, history.length不变。

六、React-Router怎么设置重定向?

采用 Redirect 进行重定向

 

七、React-Router怎么获取历史对象?

1.如果React >= 16.8 时可以使用 React Router中提供的Hooks
import { useHistory } from "react-router-dom";
let history = useHistory();

2.使用this.props.history获取历史对象
let history = this.props.history;

 

九、react的路由和普通路由有什么区别?

React路由是前端的路由,普通路由指的是后端的路由
React路由不管是hash还是browser的模式,都是在响应了hash/browser的change之后,再变更页面的DOM结构,由于是单页应用,页面文件始终没有变化;通过请求的path,然后相应不同的组件

 

十、请你说说react的路由的优缺点?
优点:

配置灵活

支持丰富的传参

利用hashRouter也可以实现低版本浏览器的兼容


缺点:

v4之后使用url query的方式传参比较繁琐,解析时需要使用queryString 和 location.search

利用react-router的query或state进行传参打开新的路由,刷新页面后数据会丢失
BrowserRouter的模式需要服务器配合,保证在前端路由的切换范围内,都只相应同一个html文件
BrowserRouter需要现代浏览器才能兼容


十一、React-Router 4怎样在路由变化时重新渲染同一个组件?

1. 可以在这个组件的componentWillReceiveProps和shouldComponentUpdate生命周期方法中添加url变化的判断,如果url判断变化,变化了就会就会重新执行render()函数,组件变会进行重新渲染。

2. 在同一个组件添加不同的key,以下重新封装了组件:

export default function (props) {
return (<组件 {...props} key={search参数} />)
}

 

想深度学习路由的小伙伴,可以参考其他作者的文章

标签:面试题,React,state,props,组件,Router,路由,history
From: https://www.cnblogs.com/gqx-html/p/17368694.html

相关文章

  • 面试题5-2
    一、硬链接与软链接的区别?​ 硬链接是具有相同inode号的不同名字的文件,删除一个硬链接文件不影响具有相同inode的文件。硬链接只能是对同一文件系统中的文件进行链接。不能对目录进行创建。软链接有自己的inode。文件用户数据块里面存放的内容就是文件的绝对路径。软链接可以用来......
  • Less 相关面试题
    一、Less是什么?Less(LeanerStyleSheets的缩写)是一门向后兼容的CSS扩展语言。二、声明变量@变量名:变量值 三、less封装函数less还可以像js一样的来封装函数,需要时可以直接调用。.borderName(@px){border-radius:@px;}.box5{.borderName(10px)}......
  • 2023前端面试题二
    图片png无损压缩,尺寸体积要比jpg的大,适合做小图标jpg采用压缩算法,有一点失真,比png体积要小,适合做中大图片gif一般是做动图的webp同时支持有损或者无损压缩,相同质量的图片,webp具有更小的体积css的盒子模型标准盒子模型margin/border/padding/contentie盒子模型marg......
  • 闲聊 React hook,我们聊的是什么?
    Reacthook的由来Reacthook的由来,其实也可以看作是前端技术不断演进的结果。在worldwideweb刚刚诞生的洪荒时代,还没有js,Web页面也都是静态的,更没有所谓的前端工程师,页面的内容与更新完全由后端生成。这就使得页面的任意一点更新,都要刷新页面由后端重新生成,体验非常糟糕......
  • (一 ).react官网阅读 ———描述UI
    这个系列笔记,会从头阅读react官网文档内容,记录阅读笔记。从react官网首页可以(最重要部分是中间),分为两大块内容:学习React|API参考快速入门:介绍了常见的react概念:包括嵌套组件,状态提升,Hook等;同时还给出了react框架思想:学习React部分分为四大块;描述UI添加交互......
  • 17、架构师面试题系列之Maven面试专题及答案(18题)
    架构师面试题之Maven专题篇一、Maven有哪些优点和缺点优点如下:1.简化了项目依赖管理:2.易于上手,对于新手可能一个"mvncleanpackage"命令就可能满足他的工作3.便于与持续集成工具(jenkins)整合4.便于项目升级,无论是项目本身升级还是项目使用的依赖升级。5.有助于多模块项目的开发,......
  • React的单向数据绑定
    title:06-React的单向数据绑定publish:true单项数据绑定在Vue中,可以通过v-model指令来实现双向数据绑定。但是,在React中并没有指令的概念,而且React默认不支持双向数据绑定。React只支持,把数据从state上传输到页面,但是,无法自动实现数据从页面传输到state......
  • React Navive初识
    title:11-ReactNavive初识publish:true搭建开发环境官方文档:https://reactnative.cn/docs/getting-started.html安装Node、homebrew、Watchman安装homebrew:安装watchman:brewinstallwatchmanWatchman则是由Facebook提供的监视文件系统变更的工具。安装此工具......
  • React路由的使用
    title:07-React路由的使用publish:trueReact路由的使用使用React路由之前,我们需要先安装react-router-dom这个包。比如:yarnaddreact-router-dom代码举例:(1)index.html<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><......
  • React介绍
    title:01-React介绍publish:true虚拟DOM和diff算法在学习React之前,我们需要先了解两个概念:虚拟DOM、diff算法。虚拟DOM问题描述:假设我们的数据发生一点点的变化,也会被强制重建整颗DOM树,这么做,会涉及到很多元素的重绘和重排,导致性能浪费严重。解决上述问题的思路:实......