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

为什么react-router Route attr在组件更新时重新安装而不是重新渲染?

React Router是一个用于构建单页面应用的库,它提供了一种将组件与URL进行关联的方式。在React Router中,Route组件用于定义URL路径与对应的组件之间的映射关系。

在React Router中,Route组件有一个名为attr的属性,用于指定在组件更新时是否重新安装组件而不是重新渲染。这个属性的作用是控制组件在URL发生变化时是否重新加载。

默认情况下,当URL发生变化时,React Router会根据新的URL路径匹配对应的Route组件,并重新渲染该组件。这意味着组件的生命周期方法会被调用,组件的状态会被重置,组件的子组件也会重新渲染。

然而,有些情况下我们希望在URL发生变化时不重新渲染组件,而是重新安装组件。这种情况通常发生在组件的props发生变化时,我们希望能够重新初始化组件的状态或执行一些特定的操作。

通过在Route组件上设置attr属性为true,我们可以实现在组件更新时重新安装而不是重新渲染。这样,当URL发生变化时,React Router会重新创建该组件的实例,并调用组件的constructor方法和componentDidMount方法,但不会重新调用render方法。

这种重新安装而不重新渲染的方式可以提高组件的性能,避免不必要的重渲染操作。但需要注意的是,重新安装组件会导致组件的状态重置,因此在使用attr属性时需要谨慎处理组件的状态。

总结起来,react-router的Route组件的attr属性用于控制组件在URL发生变化时是否重新安装而不是重新渲染。通过设置attr属性为true,可以实现在组件更新时重新安装组件,这种方式可以提高性能,但需要注意处理组件的状态。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

一天梳理React面试高频知识点

react有什么特点react使用过的虚拟DOM,不是真实DOMreact可以用服务器渲染react遵循单向数据流 或者数据绑定React 中的key是什么?为什么它们很重要?...因为 React 需要将组件转化为虚拟 DOM 树,所以在编写代码,实际上是在手写一棵结构树。XML 树结构的描述上天生具有可读性强的优势。...方便react销毁组件重新渲染的时候去清空refs的东西,防止内存泄露如何配置 React-Router 实现路由切换(1)使用 组件路由匹配是通过比较 的 path 属性和当前地址的...因此在这些阶段发岀Ajax请求显然不是最好的选择。组件尚未挂载之前,Ajax请求将无法执行完毕,如果此时发出请求,将意味着组件挂载之前更新状态(如执行 setState),这通常是不起作用的。...这也意味着更新DOM, React不需要担心跟踪事件监听器。

2.8K20

前端经典react面试题及答案_2023-02-28

为什么? Ajax请求应该写在组件创建期的第五个阶段,即 componentDidMount生命周期方法中。原因如下。 创建期的其他阶段,组件尚未渲染完成。...通过 diff 算法,React 能够精确制导哪些位置发生了改变以及应该如何改变,这就保证了按需更新不是全部重新渲染。... 使用,react-router接管了其默认的链接跳转行为,区别于传统的页面跳转, 的“跳转”行为只会触发相匹配的对应的页面内容更新不会刷新整个页面。...redux 有什么缺点 一个组件所需要的数据,必须由父组件传过来,不能像 flux 中直接从 store 取 当一个组件相关数据更新,即使父组件不需要用到这个组件,父组件还是会重新 render,可能会有效率影响...应该考虑使用内置的 PureComponent 组件不是手动编写 shouldComponentUpdate() componentWillUpdate:当组件的 state 或 props 发生改变

1.5K40

「源码解析 」这一次彻底弄懂react-router路由原理

写在前面:为什么要学习react-router底层源码? 为什么要弄明白整个路由流程?...react-router可以理解为是react-router-dom的核心,里面封装了Router,Route,Switch等核心组件,实现了从路由的改变到组件更新的核心功能,我们的项目中只要一次性引入...react-router提供路由渲染组件,路由唯一性匹配组件,重定向组件等功能组件。 流程分析 当地址栏改变url,组件更新渲染都经历了什么???? 拿history模式做参考。...location并通过context上下文传递,switch通过传递的更新流,匹配出符合的Route组件渲染,最后有Route组件取出context内容,传递给渲染页面,渲染更新。...我们用一幅图来表示各个路由组件之间的关系。 ? 希望读过此篇文章的朋友,能够明白react-router的整个流程,代码逻辑不是很难理解。

3.8K40

从零手写react-router

, 官方是使用类组件书写的, 所以如果你对hooks还不是很明白的话, 得去补一下这方面的知识, 为什么要选择hooks, 因为现在绝大多数大厂react上基本都在大力推荐使用hook, 所以我们得跟上时代不是..., 我们可以使用listen来监听, 但是重新渲染组件我们 // 可以使用自己封装一个forceUpdateHook来处理, 但是如果有了location状态, 可以一石二鸟不是更好 const...还有一点区别, 当他的Route组件path没有的时候, 他也会直接渲染所匹配的组件, 我这里没有写, 为什么呢, 因为我觉得他这样不合逻辑, 你path都没给我我凭什么帮你渲染, 我为什么要提这一点哈..., 官方是使用类组件书写的, 所以如果你对hooks还不是很明白的话, 得去补一下这方面的知识, 为什么要选择hooks, 因为现在绝大多数大厂react上基本都在大力推荐使用hook, 所以我们得跟上时代不是...还有一点区别, 当他的Route组件path没有的时候, 他也会直接渲染所匹配的组件, 我这里没有写, 为什么呢, 因为我觉得他这样不合逻辑, 你path都没给我我凭什么帮你渲染, 我为什么要提这一点哈

3.1K30

前端经典react面试题(持续更新中)_2023-03-15

Js方式undefined根据用户权限类型,把菜单配置成json, 没有权限的直接不显示react-router 方式 route 标签上 添加onEnter事件,进入路由之前替换到首页<Route...通过 diff 算法,React 能够精确制导哪些位置发生了改变以及应该如何改变,这就保证了按需更新不是全部重新渲染。...但是官方提倡我们使用内置的 PureComponent 不是自己编写 shouldComponentUpdate。...行为(action)给store,不是直接通知其他组件组件内部通过订阅store中的状态state来刷新自己的视图图片Redux三大原则唯一数据源整个应用的state都被存储到一个状态树里面,并且这个状态树...,会导致插入位置之后的列表全部重新渲染这也是为什么渲染列表为什么要使用唯一的 key。

1.3K20

从零手写react-router

, 官方是使用类组件书写的, 所以如果你对hooks还不是很明白的话, 得去补一下这方面的知识, 为什么要选择hooks, 因为现在绝大多数大厂react上基本都在大力推荐使用hook, 所以我们得跟上时代不是..., 我们可以使用listen来监听, 但是重新渲染组件我们 // 可以使用自己封装一个forceUpdateHook来处理, 但是如果有了location状态, 可以一石二鸟不是更好 const...Route组件, 那我们话不多说, 来看看Route组件的实现过程吧我们react-router中建立Route.js文件import React from "react";import pathMatch...还有一点区别, 当他的Route组件path没有的时候, 他也会直接渲染所匹配的组件, 我这里没有写, 为什么呢, 因为我觉得他这样不合逻辑, 你path都没给我我凭什么帮你渲染, 我为什么要提这一点哈..., 其实这些组件不是很难, 你只要顺着他的逻辑去捋一捋, 一定是可以实现的现在我们要做的就是去实现我们的Redirect组件, react-router目录下新建一个Redirect.js// react-router

1.4K40

从零手写react-router

, 官方是使用类组件书写的, 所以如果你对hooks还不是很明白的话, 得去补一下这方面的知识, 为什么要选择hooks, 因为现在绝大多数大厂react上基本都在大力推荐使用hook, 所以我们得跟上时代不是..., 我们可以使用listen来监听, 但是重新渲染组件我们 // 可以使用自己封装一个forceUpdateHook来处理, 但是如果有了location状态, 可以一石二鸟不是更好 const...Route组件, 那我们话不多说, 来看看Route组件的实现过程吧我们react-router中建立Route.js文件import React from "react";import pathMatch...还有一点区别, 当他的Route组件path没有的时候, 他也会直接渲染所匹配的组件, 我这里没有写, 为什么呢, 因为我觉得他这样不合逻辑, 你path都没给我我凭什么帮你渲染, 我为什么要提这一点哈..., 其实这些组件不是很难, 你只要顺着他的逻辑去捋一捋, 一定是可以实现的现在我们要做的就是去实现我们的Redirect组件, react-router目录下新建一个Redirect.js// react-router

1.5K50

阿里前端二面react面试题_2023-02-28

Redux实现原理解析 为什么要用redux React中,数据组件中是单向流动的,数据从一个方向父组件流向子组件(通过props),所以,两个非父子组件之间通信就相对麻烦,redux的出现就是为了解决...,不是直接通知其他组件组件内部通过订阅store中的状态state来刷新自己的视图 图片 Redux三大原则 唯一数据源 整个应用的state都被存储到一个状态树里面,并且这个状态树,只存在于唯一的... React 得到元素树之后,React 会计算出新的树和老的树之间的差异,然后根据差异对界面进行最小化重新渲染。...通过 diff 算法,React 能够精确制导哪些位置发生了改变以及应该如何改变,这就保证了按需更新不是全部重新渲染。...类组件可以使用其他特性,如状态 state 和生命周期钩子。 当组件只是接收 props 渲染到页面,就是无状态组件,就属于函数组件,也被称为哑组件或展示组件

1.8K20

一场升级 React-Router 带来的‘血案’

当路由跳转,history 发生变化,期望组件 Index 也重新渲染更新展示内容。 这个功能在项目中是一直没有问题的。但是最近小明开发了一个和当前组件毫无关系的新功能,并上了线。...那么可以通过如下方式验证一下: 下载本地 node_modules; 重新安装 npm install 经过上述方案折腾之后,发现本地现象和线上的一样了。...显然这个不是最佳答案,首先我们应该从问题的本质入手,为什么 react-router 不能通过 useHistory 订阅路由信息了。那么本质上到底改了些什么呢?...类组件 contextType 和函数组件的 useContext也可以订阅消费 context value ,并且 context value 改变的时候,它们会重新渲染,而且不受到 PureComponent...我们回到小明遇到的问题,之前小明用 useHistory 来订阅路由变化,当路由更新,那么使用 useHistory 的组件重新渲染,因为之前的逻辑是,路由更新就会更新 history 对象 。

1.4K30

React 中的一些 Router 必备知识点

后续对比 React-Router 版本发现,是因为 V4 版本中变更了其渲染逻辑,原因据说是为了践行 React 的组件化理念,不能让 Route 标签看起来只是一个标签(奇怪的知识又增加了)。...处理 URL ,除了问号带参数的方式,React-Router 能帮我们做什么呢?在这其中,Route 组件的 path 属性便可用于指定路由的匹配规则。...跳转,有两种形式带上参数。其一是 Link 组件的 to 参数中通过配置字符串并用问号带参数,其二是 to 参数可以接受一个对象,其中可以 search 字段中配置想要传递的参数。...Router 做的事情:URL 改变,触发渲染渲染对应的组件。 URL 有两种,一种不带 #,一种带 #,分别对应 Browse 模式和 Hash 模式。...state 改变,通知 Router 组件更新 location 并通过 context 上下文传递,匹配出符合的 Route 组件,最后由 组件取出对应内容,传递给渲染页面,渲染更新

2.8K40

从零手写react-router_2023-03-01

, 官方是使用类组件书写的, 所以如果你对hooks还不是很明白的话, 得去补一下这方面的知识, 为什么要选择hooks, 因为现在绝大多数大厂react上基本都在大力推荐使用hook, 所以我们得跟上时代不是...React中, Router组件是用来提供上下文的, BrowserRouter创建了一个控制浏览器history api的history对象以后然后传递给Router 我们react-router..., 我们可以使用listen来监听, 但是重新渲染组件我们 // 可以使用自己封装一个forceUpdateHook来处理, 但是如果有了location状态, 可以一石二鸟不是更好 const...Route组件, 那我们话不多说, 来看看Route组件的实现过程吧 我们react-router中建立Route.js文件 import React from "react"; import pathMatch...还有一点区别, 当他的Route组件path没有的时候, 他也会直接渲染所匹配的组件, 我这里没有写, 为什么呢, 因为我觉得他这样不合逻辑, 你path都没给我我凭什么帮你渲染, 我为什么要提这一点哈

1.3K30

手写react-router

, 官方是使用类组件书写的, 所以如果你对hooks还不是很明白的话, 得去补一下这方面的知识, 为什么要选择hooks, 因为现在绝大多数大厂react上基本都在大力推荐使用hook, 所以我们得跟上时代不是..., 我们可以使用listen来监听, 但是重新渲染组件我们 // 可以使用自己封装一个forceUpdateHook来处理, 但是如果有了location状态, 可以一石二鸟不是更好 const...Route组件, 那我们话不多说, 来看看Route组件的实现过程吧我们react-router中建立Route.js文件import React from "react";import pathMatch...还有一点区别, 当他的Route组件path没有的时候, 他也会直接渲染所匹配的组件, 我这里没有写, 为什么呢, 因为我觉得他这样不合逻辑, 你path都没给我我凭什么帮你渲染, 我为什么要提这一点哈..., 其实这些组件不是很难, 你只要顺着他的逻辑去捋一捋, 一定是可以实现的现在我们要做的就是去实现我们的Redirect组件, react-router目录下新建一个Redirect.js// react-router

1.3K40

「React进阶」react-router v6 通关指南

因为新的架构中 ,Routes 充当了很重要的角色, react-router路由原理 文章中,曾介绍到 Switch 可以根据当前的路由 path ,匹配唯一的 Route 组件加以渲染。...会重新渲染,内部通过 match 匹配到当前的路由组件是否挂载,那么就是说真正去匹配,去挂载的核心组件Route。...派发更新渲染整个 router 树。这是和老版本的区别,老版本里面,监听路由变化更新组件 Router 中进行的。...这可能会颠覆很多同学的认识,Route 组件不是常规的组件,可以理解成一个空函数。如果是正常按照组件挂载方式处理,那么肯定会报错误,那么我们写的 是怎么处理的呢?...原理层面上: 老版本的路由本质在于 Route 组件,当路由上下文 context 改变的时候,Route 组件重新渲染,然后通过匹配来确定业务组件是否渲染

4.9K41

React 进阶 - React Router

整个 React-Router 的核心,里面包括两种路由模式下改变路由的方法,和监听路由变化方法等 React-Router 有了 History 路由监听 / 改变的核心,那么需要调度组件负责派发这些路由的更新...,也需要容器组件通过路由更新,来渲染视图 History 核心基础上,增加了 Router ,Switch ,Route组件来处理视图渲染 React-Router-DOM React-Router...React-Router 是通过 context 上下文方式传递的路由信息 context 改变,会使消费 context 组件更新,触发路由改变重新渲染匹配组件 props.history...属性,Route 可以将路由信息隐式注入到页面组件的 props 中,但是无法传递父组件中的信息 render 形式:Route 组件的 render 属性,可以接受一个渲染函数,函数参数就是路由信息,...,路由改变到页面重新渲染流程。

1.8K21

React 中的一些 Router 必备知识点

后续对比 React-Router 版本发现,是因为 V4 版本中变更了其渲染逻辑,原因据说是为了践行 React 的组件化理念,不能让 Route 标签看起来只是一个标签(奇怪的知识又增加了)。...处理 URL ,除了问号带参数的方式,React-Router 能帮我们做什么呢?在这其中,Route 组件的 path 属性便可用于指定路由的匹配规则。...跳转,有两种形式带上参数。其一是 Link 组件的 to 参数中通过配置字符串并用问号带参数,其二是 to 参数可以接受一个对象,其中可以 search 字段中配置想要传递的参数。...Router 做的事情:URL 改变,触发渲染渲染对应的组件。 URL 有两种,一种不带 #,一种带 #,分别对应 Browse 模式和 Hash 模式。...state 改变,通知 Router 组件更新 location 并通过 context 上下文传递,匹配出符合的 Route 组件,最后由 组件取出对应内容,传递给渲染页面,渲染更新

2.6K20

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

当一个 匹配成功,它将渲染其内容,当它不匹配就会渲染 null。没有路径的 将始终被匹配。... 使用,react-router接管了其默认的链接跳转行为,区别于传统的页面跳转, 的“跳转”行为只会触发相匹配的对应的页面内容更新不会刷新整个页面。...典型的数据流中,props 是父子组件交互的唯一方式,想要修改子组件,需要使用新的pros重新渲染它。凡事有例外,某些情况下咱们需要在典型数据流外,强制修改子代,这个时候可以使用 Refs。...这对性能有好处,也意味着 React 更新 DOM 不需要跟踪事件监听器。...构造组件,通常将 Refs 分配给实例属性,以便可以整个组件中引用它们。

4.7K30

2021前端react高频面试题汇总

当一个 匹配成功,它将渲染其内容,当它不匹配就会渲染 null。没有路径的 将始终被匹配。... 使用,react-router接管了其默认的链接跳转行为,区别于传统的页面跳转, 的“跳转”行为只会触发相匹配的对应的页面内容更新不会刷新整个页面。...典型的数据流中,props 是父子组件交互的唯一方式,想要修改子组件,需要使用新的pros重新渲染它。凡事有例外,某些情况下咱们需要在典型数据流外,强制修改子代,这个时候可以使用 Refs。...这对性能有好处,也意味着 React 更新 DOM 不需要跟踪事件监听器。...构造组件,通常将 Refs 分配给实例属性,以便可以整个组件中引用它们。

5.4K00

腾讯前端必会react面试题合集_2023-02-27

受控组件是 React 控制中的组件,并且是表单数据真实的唯一来源。 非受控组件是由 DOM 处理表单数据的地方,不是 React 组件中。...,我们首先来看为什么需要它 问题 : 随着应用变得越来越庞大,整个更新渲染的过程开始变得吃力,大量的组件渲染会导致主进程长时间被占用,导致一些动画或高频操作出现卡顿和掉帧的情况。...关键点,便是 同步阻塞。之前的调度算法中,React 需要实例化每个类组件,生成一颗组件树,使用 同步递归 的方式进行遍历渲染,而这个过程最大的问题就是无法 暂停和恢复。...当一个 匹配成功,它将渲染其内容,当它不匹配就会渲染 null。没有路径的 将始终被匹配。...useState 要使用数组不是对象 useState 的用法: const [count, setCount] = useState(0) 可以看到 useState 返回的是一个数组,那么为什么是返回数组不是返回对象呢

1.7K20
领券