首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >多次单击相同的react路由器链接时,强制重新装入组件

多次单击相同的react路由器链接时,强制重新装入组件
EN

Stack Overflow用户
提问于 2019-09-04 02:57:52
回答 5查看 7K关注 0票数 2

当组件挂载时,我有一个带有datatable获取数据的路由页面。当我多次单击相同的react router(到上面的路由)时,似乎只有在路由更改时才卸载组件(要呈现不同的组件)。

我希望当再次单击相同的链接以获取新数据时,组件被强制重新装入。是否有任何选项在反应-路由器-多玛链接或任何其他链接组件或任何技巧来做到这一点?

我这里的示例代码:https://codesandbox.io/s/react-router-9wrkz

我希望当多次单击“关于链接”时,有关组件将重新装入。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2019-09-04 03:22:19

强制组件重新挂载的一种方法是更改key支柱(可以使用Date.now()props.location.key):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  <Route
    path="/about"
    render={props => <About key={props.location.key} {...props} />}
  />
票数 16
EN

Stack Overflow用户

发布于 2019-09-04 04:09:10

您可以使用此方法来呈现

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
componentWillReceiveProps(recievedProps) {
    console.log("componentWillReceiveProps called");
    if (
      recievedProps &&
      this.props &&
      recievedProps.location &&
      this.props.location &&
      recievedProps.location.key &&
      this.props.location.key &&
      recievedProps.location.key !== this.props.location.key
    ) {
      this.setState({ loading: true });
      promise().then(result => {
        this.setState({ value: result, loading: false });
      });
    }
  }
票数 2
EN

Stack Overflow用户

发布于 2021-07-28 05:20:51

将来可以用来作参考。除了上面提到的答案之外,我还需要调整一些东西,因为它们都不像我想要的那样工作。前面提到过比较道具,但是因为键在对象(引用)中,所以它从未看到更新(您正在比较同一个对象)。所以我把它作为道具保存下来。

我更喜欢使用componentDidUpdate,因为当您可能只需要更新某些元素时,没有卸载和挂载整个组件,

在本例中,您的组件确实需要使用withRouter()进行链接,这样您就可以访问路由支持。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    // You cant use prevProps because object will be the same, so save it in component
    private currentRouteLocationKey: string| undefined; 

    public componentDidUpdate(): void {
    const currentRouteKey = this.props.history.location.key;

        // Compare keys so you only update when needed
        if (this.currentRouteLocationKey !== currentRouteKey) {
            // Add logic you want reset/ updated
            this.refreshPage();

            // Save the new key
            this.currentRouteLocationKey = currentRouteKey;
        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57786965

复制
相关文章
详解强制Vue组件重新渲染的方法
虽然Vue不会自动更新这种情况是相对比较少,但是知道如何在出现这个问题时修复它还是很有用的。
Javanx
2020/08/19
4.3K0
Vue 中 强制组件重新渲染的正确方法
有时候,依赖 Vue 响应方式来更新数据是不够的,相反,我们需要手动重新渲染组件来更新数据。或者,我们可能只想抛开当前的DOM,重新开始。那么,如何让Vue以正确的方式重新呈现组件呢?
前端小智@大迁世界
2022/06/15
7.9K1
Vue 中 强制组件重新渲染的正确方法
程序的编译、链接,装入过程
内存是用于存储数据的硬件。程序执行前需要先放到内存中才能被CPU处理。代码编译到运行流程:编译->链接->装入。
小末快跑
2022/01/10
1.1K0
程序的编译、链接,装入过程
React强制刷新组件的一种方式
点击获取数据按钮会加载赛事列表,列表中的操作项分为多个组,组数据是根据对应比赛的id获取的,从而渲染出来的按钮。
挥刀北上
2022/11/11
5.4K0
React强制刷新组件的一种方式
程序如何运行:编译、链接、装入
在多道程序环境下,要使程序运行,必须先为之创建进程。而创建进程的第一件事,便是将程序和数据装入内存。如何将一个用户源程序变为一个可在内存中执行的程序,通常都要经过以下几个步骤:
黄规速
2022/04/14
1.8K0
程序如何运行:编译、链接、装入
React中传入组件的props改变时更新组件的几种实现方法
我们使用react的时候常常需要在一个组件传入的props更新时重新渲染该组件,常用的方法是在componentWillReceiveProps中将新的props更新到组件的state中(这种state被成为派生状态(Derived State)),从而实现重新渲染。React 16.3中还引入了一个新的钩子函数getDerivedStateFromProps来专门实现这一需求。但无论是用componentWillReceiveProps还是getDerivedStateFromProps都不是那么优雅,而且容易出错。所以今天来探讨一下这类实现会产生的问题和更好的实现方案。
MudOnTire
2019/05/26
5.2K0
基础 | React怎么判断什么时候该重新渲染组件?
前端爱好者的知识盛宴 React因为他的性能而著名。因为他有一个虚拟DOM层并且只有在需要时才更新真实DOM。即使是同样地信息这也比一直直接更新DOM要快很多。但是,React的智能仅此而已(目前为止),我们的任务是知道React的预期行为以及限制,这样我们才不会意外损失性能。 我们需要关注的一方面是React如何决定什么时候重新渲染组件。不是重新渲染DOM节点,只是调用render方法来改变虚拟DOM。我们可以通过告诉React什么时候需要渲染什么时候不需要渲染来帮助React。让我们依次来看看这些。
用户1097444
2022/06/29
2.9K0
基础 | React怎么判断什么时候该重新渲染组件?
typecho旧链接重新跳转
用户9131103
2023/07/17
1380
typecho旧链接重新跳转
Web 性能优化: 使用 React.memo() 提高 React 组件性能
React.js 核心团队一直在努力使 React 变得更快,就像燃烧的速度一样。为了让开发者能够加速他们的 React 应用程序,为此增加了很多工具:
前端小智@大迁世界
2019/03/20
5.6K0
Web 性能优化: 使用 React.memo() 提高 React 组件性能
React.memo() 和 useMemo() 的用法与区别
导语 | 本文翻译自 Adebola Adeniran 在 LogRocket 论坛中关于 React.memo() 和 useMemo() 对比与用例分析。 在软件开发中,我们通常痴迷于性能提升以及如何使我们的应用程序执行得更快,从而为用户提供更好的体验。 Memoization 是优化性能的方法之一。在本文中,我们将探讨它在 React 中的工作原理。 什么是 memoization? 编者注解 在解释这个概念之前,让我们先来看一个简单的斐波那契程序: function fibonacci(n){   
用户1097444
2022/06/29
2.7K0
React.memo() 和 useMemo() 的用法与区别
React Native中FlatList组件不重新渲染Item解决方法
今天在写一个点击TouchableOpacity调用函数重新渲染图表的功能,一开始是点击之后图表可以正常切换但是TouchableOpacity颜色没有变化
henu_Newxc03
2022/05/05
2K0
React Native中FlatList组件不重新渲染Item解决方法
QQ 强制生成卡片式链接
以前在 QQ 里面聊天的时候发现,有些链接是卡片式的链接,像知乎里那些一样,就好奇为啥我的域名没有生成卡片。 查了一下百度知道了大概就是 qq 没有抓取到你的网站的 xml。并在其他教程中得到了一个
Cell
2022/02/25
2.6K1
QQ 强制生成卡片式链接
阿里前端二面必会react面试题总结1
在类定义中,我们可以使用到许多 React 特性,例如 state、 各种组件生命周期钩子等,但是在函数定义中,我们却无能为力,因此 React 16.8 版本推出了一个新功能 (React Hooks),通过它,可以更好的在函数定义组件中使用 React 特性。
beifeng1996
2023/01/03
2.8K0
React - 组件:类组件
他有自己的生命周期也有react给他提供的一些内置函数方法。有自己的this和状态。
xing.org1^
2019/12/11
1.9K0
React - 组件:类组件
React 组件
接下来我们封装一个输出 "Hello World!" 的组件,组件名为 HelloMessage:
陈不成i
2021/07/29
7530
React组件的本质
也许你已经使用React很长时间了,你使用优雅的jsx语法和React hooks来构建组件,最终构成页面。
Mirone
2020/04/29
1.4K0
SQLServer数据库、附加数据库时出错。有关详细信息,请单击“消息”列中的超链接
在SQL Server 数据库中附加数据库时出错: 这是由于权限的问题,找到数据库所在文件或文件件: 我的数据库文件放到了 “新建文件夹(2)” 中了,所以,我设置下这个文件夹的权限: 1、点击右键,
qubianzhong
2018/09/19
18.1K0
SQLServer数据库、附加数据库时出错。有关详细信息,请单击“消息”列中的超链接
react的组件通信
本文最后更新于 128 天前,其中的信息可能已经有所发展或是发生改变。 react的组件通信 1、父组件传子组件 import React, {Component} from 'react' class Father extends Component{ render() { return ( <div> <Child msg="我是父组件中的数据:father-data"/> </div>
likepoems
2023/03/04
6670
滴滴前端常考react面试题(附答案)
通常,render props和高阶组件仅渲染一个子组件。React团队认为,Hooks 是服务此用例的更简单方法。
flyzz177
2022/09/13
2.3K0
React-组件-非受控组件 和 React-组件-高阶组件
🌊 关注我不迷路,如果本篇文章对你有所帮助,或者你有什么疑问,欢迎在评论区留言,我一般看到都会回复的。大家点赞支持一下哟~ 💗
杨不易呀
2023/09/30
1890

相似问题

单击路由器链接时强制重新呈现vue组件

112

单击链接时重新加载react组件

14

重新装入React组件时,mxKeyHandler无法工作

11

React路由器:更改查询字符串不会重新装入组件。

14

React当我单击新链接时,路由器不会重新呈现。

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文