首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

2021前端react高频面试题汇总

路由: 改变 url 可以通过 history.pushState 和 resplaceState 等,会将URL压入堆栈,同时能够应用 history.go() 等 API 监听 url 的变化可以通过自定义事件触发实现...react-router 实现的思想: 基于 history 库来实现上述不同的客户端路由实现思想,并且能够保存历史记录等,磨平浏览器差异,上层无感知 通过维护的列表,在每次 URL 发生变化的回收,...如何配置 React-Router 实现路由切换 (1)使用 组件 路由匹配是通过比较 的 path 属性和当前地址的 pathname 来实现的。...React-Router如何获取URL的参数和历史对象? (1)获取URL的参数 get传值 路由配置还是普通的配置,如:'admin',传参方式如:'admin?id='1111''。...咱们可以在组件添加一个 ref 属性来使用,该属性的值是一个回调函数,接收作为其第一个参数的底层 DOM 元素或组件的挂载实例。

5.4K00
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    2022前端社招React面试题 附答案

    的变化可以通过自定义事件触发实现 react-router 实现的思想: 基于 history 库来实现上述不同的客户端路由实现思想,并且能够保存历史记录等,磨平浏览器差异,上层无感知 通过维护的列表,...在每次 URL 发生变化的回收,通过配置的 路由路径,匹配到对应的 Component,并且 render 2....如何配置 React-Router 实现路由切换 (1)使用 组件 路由匹配是通过比较 的 path 属性和当前地址的 pathname 来实现的。...React-Router如何获取URL的参数和历史对象? (1)获取URL的参数 get传值 路由配置还是普通的配置,如:'admin',传参方式如:'admin?id='1111''。...咱们可以在组件添加一个 ref 属性来使用,该属性的值是一个回调函数,接收作为其第一个参数的底层 DOM 元素或组件的挂载实例。

    4.8K30

    2021前端react高频面试题汇总

    路由: 改变 url 可以通过 history.pushState 和 resplaceState 等,会将URL压入堆栈,同时能够应用 history.go() 等 API 监听 url 的变化可以通过自定义事件触发实现...react-router 实现的思想: 基于 history 库来实现上述不同的客户端路由实现思想,并且能够保存历史记录等,磨平浏览器差异,上层无感知 通过维护的列表,在每次 URL 发生变化的回收,...如何配置 React-Router 实现路由切换 (1)使用 组件 路由匹配是通过比较 的 path 属性和当前地址的 pathname 来实现的。...React-Router如何获取URL的参数和历史对象? (1)获取URL的参数 get传值 路由配置还是普通的配置,如:'admin',传参方式如:'admin?id='1111''。...咱们可以在组件添加一个 ref 属性来使用,该属性的值是一个回调函数,接收作为其第一个参数的底层 DOM 元素或组件的挂载实例。

    5K20

    react-router 的使用与优化

    相较于 hashRouter,该方法的路由没有 # 标志。需要注意的是,生成的路径是 虚拟的,当再次回车后,页面可能就什么都没了。...Route 中的 exact 属性表示只有 path 完全匹配时才渲染对应的组件,上面例子中,如果没有 Switch 组件和 exact 属性时,当访问 /123 路由页时,/ 路由也会匹配到,因为 /...当我们访问 /user/123456 时就可以跳转到 ID 为 123456 的用户页面。在 react-router 中可以通过 props.match.params 获取到传入的参数值。...当一个组件不是通过路由跳转而展示出来时,这个组件的 props 上就没有路由信息。...从服务器端发送一个恰当的重定向链接即可。location 就是将服务端接收到的 URL 传递给路由来处理。 与 Redux 结合 react-router 可以与 redux 深度结合。

    3.2K10

    面试官又叫我手写 React-router,我决定好好理解路由本质

    先用最简单的话来概括一下 React-router 到底做了什么? 本质上, React-Router 就是在页面 URL 发生变化的时候,通过我们写的 path 去匹配,然后渲染对应的组件。...那么,从这句话,我们想一下如何分步骤实现: 如何监听 url 的变化 ? 如何匹配 path,按什么规则 ? 渲染对应的组件 了解好需要实现的关键步骤,我们来将仓库源码下载下来。...了解完多包的组织关系之后,我们回到前面如何实现 react-router 的 3个关键步骤,如下: 如何监听 url 的变化 ? 如何匹配 path ?...一、监听 URL 的变化 正常情况下,当 URL 发生变化时,浏览器会像服务端发送请求,但使用以下2种办法不会向服务端发送请求: 基于 hash 基于 history react-router 使用了...监听 URL 的变化,拿到对应的 history,location,match 等通过 Provider 注入到子组件中。 ? 二、Route 中匹配渲染组件 ?

    84130

    react-router学习笔记

    History React Router 是建立在 history 上的,简而言之,一个 history 知道如何去监听浏览器地址栏的变化, 并解析这个 URL 转化为 location 对象, 然后...(用来作为恢复 location state 的唯一 key 标识) 当一个 history 通过应用程序的 push 或 replace 跳转时,它可以在新的 location 中存储 “location...现在动画的思路比较靠谱的也大致是这种:通过添加/移除 class 的方式,利用 css3 做动效。 滚动条复位 当页面回退时,将滚动条恢复到页面最顶部,可以让单页路由看起来更加正常。...Route 渲染的组件,可以通过 withRouter 拿到路由信息,仅当其为 Router 的子元素时有效。...这种设计思路与 Nestjs 的描述性路由具有相同的思想 - 在 nodejs 中,我们可以通过装饰器,在任意一个 Action 上描述其访问的 URL: @POST("/api/service") async

    2.7K10

    第二十一篇:从 React-Router 切入,系统学习前端路由解决方案

    接下来我们就结合 React-Router 的源码,一起来看看“跳转”这个动作是如何实现的。 2. React-Router 是如何实现路由跳转的?...,为了实现一个简单的路由跳转效果,一共从 React-Router 中引入了以下 3 个组件: 1....这个体验并不好,不过在最初也是无奈之举-毕竟用户只有在刷新页面的情况下,才可以重新去请求数据。...这意味着用户前进、后退触发的新内容,都会映射到不同的 URL 上去。此时即便他刷新页面,因为当前的 URL 可以标识出他所处的位置,因此内容也不会丢失。 那么如何实现这个目的呢?...此时若走正常的请求-刷新流程,反而会使用户的前进后退操作无法被记录; 2. 单页面应用对服务端来说,就是一个 URL、一套资源,那么如何做到用“不同的 URL”来映射不同的视图内容呢?

    49810

    使用React-Router实现前端路由鉴权

    我们一般的系统都会有用户访问权限的限制,某些页面可能需要用户具有一定的权限才能访问。本文就是用React-Router来实现一个前端鉴权模型。...: /index: 网站首页 /login: 登录页 /backend:后台页面 /admin:管理页面 另外还有三种角色: 未登录用户:只能访问网站首页/index和登录页/login 普通用户...:可以访问网站首页/index,登录页/login和后台页面/backend 管理员:可以访问管理页面/admin和其他所有页面 引入React-Router 要实现路由鉴权,我们还得一步一步来,我们先用...但是对于需要登录才能访问的页面和管理员页面我们不能直接渲染Route组件,我们最好再封装一个高级组件,将鉴权的工作放到这个组件里面去,这样我们普通的页面在实现时就不需要关心怎么鉴权了。...封装高级组件 要封装这个鉴权组件思路也很简单,前面我们将publicRoutes直接拿来循环渲染了Route组件,我们的鉴权组件只需要在这个基础上再加一个逻辑就行了:在渲染真正的Route组件前先检查一下当前用户是否有对应的权限

    2.4K41

    react-router 实现分析

    模式 通过监听 window.location 的变化来渲染对应组件 如何监听到 window.location 的变化呢?...404,一般单页面项目,服务器配置都是统一返回同一静态资源,也就是打包后的 index.html) history 模式是如何监听 url 改变的呢?...既然是 API 那它肯定有一些暴露的方法供我们使用: 控制台打印的 history 对象 属性: length :返回一个整数,该整数表示会话历史中元素的数目,包括当前加载的页。...当整数参数超出界限时没有效果也不会报错。 back(): 在浏览器历史记录里前往上一页, 用户可点击浏览器左上角的返回(译者注:←)按钮模拟此方法. 等价于 history.go(-1)。...参数可以写入 state 和新的 url 这些方法能够自动处理浏览器访问记录,然后 react-router 只需要监听对应的 location.pathname 就可以更新对应的路由组件。

    59720

    从零手写react-router

    组件也写完了Route组件的实现Route组件主要是用来根据不同的路径匹配不同的组件的, 其实他没那么复杂, 就是通过不同的路径来渲染不同的组件, 如果你写的草率一点, 完全可以使用if else 来一直进行判断也可以写好...; // 依旧给他来null就好了}其实我们这里我们跟react-router还有一点区别, 当他的Route组件path没有的时候, 他也会直接渲染所匹配的组件, 我这里没有写, 为什么呢, 因为我觉得他这样不合逻辑.../Redirect.js// Redirect组件其实就是用来做重定向的, 其实逻辑也可以非常简单, 当你遇到了Redirect组件, 你通过location上// 的replace方法将他去渲染指定的路径就行了...组件也写完了Route组件的实现Route组件主要是用来根据不同的路径匹配不同的组件的, 其实他没那么复杂, 就是通过不同的路径来渲染不同的组件, 如果你写的草率一点, 完全可以使用if else 来一直进行判断也可以写好...; // 依旧给他来null就好了}其实我们这里我们跟react-router还有一点区别, 当他的Route组件path没有的时候, 他也会直接渲染所匹配的组件, 我这里没有写, 为什么呢, 因为我觉得他这样不合逻辑

    3.1K30

    react-router-dom使用指南(最新V6)

    (可以使用相对路径,语法和 JS 相同) 传入-1表示后退 四、动态路由参数 4.1 路径参数 在Route组件中的path属性中定义路径参数 在组件内通过useParams hook 访问路径参数 当 url 为/foo时:Foo 中的 Outlet 会显示 Default 组件 当 url...、replace)的接口,因此 react-router 对原生的 history 对线进行了包装,提供了监听URL改变的API。...是纯前端路由,可以通过输入URL直接访问;使用时 BrowserRouter 直接输入URL会显示404,除非配置Nginx将请求指向对应的HTML文件。...由于项目使用的history和react-router中使用的history版本可能不一样,该API目前标为unstable状态 12.3 MemoryRouter HashRouter 和 BrowserRouter

    4.5K21

    从零手写react-router

    将匹配结果返回出去 // 首先, 如果你读了这个path-to-regex的文档的话, 你会发现一个问题 // 我们在react-router中传递exact为精确匹配, 而在该库中则是使用end.../ - 当页面地址发生变化的时候, 我们需要重新渲染组件, 我们可以使用listen来监听, 但是重新渲染组件我们 // 可以使用自己封装一个forceUpdateHook来处理, 但是如果有了location...组件也写完了Route组件的实现Route组件主要是用来根据不同的路径匹配不同的组件的, 其实他没那么复杂, 就是通过不同的路径来渲染不同的组件, 如果你写的草率一点, 完全可以使用if else 来一直进行判断也可以写好...; // 依旧给他来null就好了}其实我们这里我们跟react-router还有一点区别, 当他的Route组件path没有的时候, 他也会直接渲染所匹配的组件, 我这里没有写, 为什么呢, 因为我觉得他这样不合逻辑.../Redirect.js// Redirect组件其实就是用来做重定向的, 其实逻辑也可以非常简单, 当你遇到了Redirect组件, 你通过location上// 的replace方法将他去渲染指定的路径就行了

    1.4K40

    从零手写react-router

    将匹配结果返回出去 // 首先, 如果你读了这个path-to-regex的文档的话, 你会发现一个问题 // 我们在react-router中传递exact为精确匹配, 而在该库中则是使用end.../ - 当页面地址发生变化的时候, 我们需要重新渲染组件, 我们可以使用listen来监听, 但是重新渲染组件我们 // 可以使用自己封装一个forceUpdateHook来处理, 但是如果有了location...组件也写完了Route组件的实现Route组件主要是用来根据不同的路径匹配不同的组件的, 其实他没那么复杂, 就是通过不同的路径来渲染不同的组件, 如果你写的草率一点, 完全可以使用if else 来一直进行判断也可以写好...; // 依旧给他来null就好了}其实我们这里我们跟react-router还有一点区别, 当他的Route组件path没有的时候, 他也会直接渲染所匹配的组件, 我这里没有写, 为什么呢, 因为我觉得他这样不合逻辑.../Redirect.js// Redirect组件其实就是用来做重定向的, 其实逻辑也可以非常简单, 当你遇到了Redirect组件, 你通过location上// 的replace方法将他去渲染指定的路径就行了

    1.5K50

    【React】377- 实现 React 中的状态自动保存

    假设有下述场景: 移动端中,用户访问了一个列表页,上拉浏览列表页的过程中,随着滚动高度逐渐增加,数据也将采用触底分页加载的形式逐步增加,列表页浏览到某个位置,用户看到了感兴趣的项目,点击查看其详情,进入详情页...,因为某些原因需要临时离开交互场景,则需要对状态进行保存 在 React 中,我们通常会使用路由去管理不同的页面,而在切换页面时,路由将会卸载掉未匹配的页面组件,所以上述列表页例子中,当用户从详情页退回列表页时...,会回到列表页顶部,因为列表页组件被路由卸载后重建了,状态被丢失 如何实现 React 中的状态保存 在 Vue 中,我们可以非常便捷地通过 [1] 标签实现状态的保存,该标签会缓存不活动的组件实例...手动保存状态,是比较常见的解决方式,可以配合 React 组件的 componentWillUnmount 生命周期通过 redux 之类的状态管理层对数据进行保存,通过 componentDidMount...,我们需要研究如何自动保存状态 通过路由实现自动状态保存(通常使用 react-router) 既然 React 中状态的丢失是由于路由切换时卸载了组件引起的,那可以尝试从路由机制上去入手,改变路由对组件的渲染行为

    2.9K30

    React-router杂记

    HashRouter: 即对应url中的hash值,如xx.com/#/a、xx.com/#/a/b, 服务器对任务url都返回同一个url,具体的路径由浏览器区分,因为浏览器不会发送hash后面的值给服务器...BrowserRouter:如果是BrowseRouter即url变成这样,xx.com/a、xx.com/a/b, 所以要对服务器配置不同的url返回不同的资源。...**react-router的哲学** https://github.com/rccoder/blog/issues/29 动态路由,每一个route都是一个组件,更好的配合React 路由嵌套...**react-router和redux问题** 有时候,当location改变,组件并没有更新(子路由组件或者activity link),主要是因为: 1.组件直接通过redux的connect...2.该组件不是路由组件,也就是没有这样的代码 原因是redux内部实现了shouldComponentUpdate,但又没有从react-router接收到props,意味着不会改变。

    1.3K30

    从零手写react-router_2023-03-01

    将匹配结果返回出去 // 首先, 如果你读了这个path-to-regex的文档的话, 你会发现一个问题 // 我们在react-router中传递exact为精确匹配, 而在该库中则是使用end...// - 当页面地址发生变化的时候, 我们需要重新渲染组件, 我们可以使用listen来监听, 但是重新渲染组件我们 // 可以使用自己封装一个forceUpdateHook来处理, 但是如果有了...组件也写完了 Route组件的实现 Route组件主要是用来根据不同的路径匹配不同的组件的, 其实他没那么复杂, 就是通过不同的路径来渲染不同的组件, 如果你写的草率一点, 完全可以使用if else...null; // 依旧给他来null就好了 } 其实我们这里我们跟react-router还有一点区别, 当他的Route组件path没有的时候, 他也会直接渲染所匹配的组件, 我这里没有写, 为什么呢...react-router/Redirect.js // Redirect组件其实就是用来做重定向的, 其实逻辑也可以非常简单, 当你遇到了Redirect组件, 你通过location上 // 的replace

    1.4K30
    领券