首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >React路由器:呈现的路由组件中的访问历史记录

React路由器:呈现的路由组件中的访问历史记录
EN

Stack Overflow用户
提问于 2017-09-12 11:47:36
回答 2查看 2.2K关注 0票数 7

我知道这方面有很多问题,但我似乎无法让它发挥作用:我需要从通过路由呈现的子组件中访问“历史记录”。(它接收来自redux容器的道具)。

我需要将历史对象传递给每个路由中呈现的组件,这样我就可以在子组件中使用this.props.history.push('/route')。这个应用程序以前不太动态,所以每个路由都是用component={someComponent}硬编码的;但是我发现在动态地执行路由时,您需要使用render={() => <someComponent />}

在更改了从component={}render={() => ...}的路由后,我丢失了子组件中的历史记录。

我的代码就像:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import React, {Component} from 'react';
import ReactDOM from 'react-dom';
import { HashRouter as Router, Link, Route, Redirect } from 'react-router-dom';

import { Nav_Item } from '.'
import DynamicTab from '.';

export default class NavBar extends React.Component {
  constructor(props) {
    super(props);
    this.state={}
  }
  render() {

    let tabs = [];

    let routes = [];

    this.props.tabs.forEach( function(tab, index) {
      tabs.push(<Nav_Item  key={tab.name} path_name={'/' + tab.name} tab_text={tab.label} />);
      routes.push(<Route key={tab.name} path={'/' + tab.name} render={() => <DynamicTab tabName={tab.name} tabSpecs={tab} />} />);
    })

    return (
      <Router>
        <div>

          <div>
            <ol>
              { tabs }    
            </ol>
          </div>

          <Redirect to={'/' + this.props.tabs[0].name} />
          { routes } 

        </div>
      </Router>   
    )
  }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-12 11:58:00

当你使用render时,你实际上得到了道具。在文档中有这样一个例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<Route {...rest} render={props => (
   <FadeIn>
       <Component {...props}/>
   </FadeIn>
 )}/>

所以你应该可以从这些道具中获取历史记录。

另一种解决方案是有条件地呈现一个<Redirect/>组件。所以,也许你有一些内部状态,你可以这样使用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// in your components render function.. 
if(this.state.shouldRedirect) { 
  return (<Redirect to={yourURL} />);
}
票数 8
EN

Stack Overflow用户

发布于 2019-09-10 00:42:53

this.props.router和你可以访问任何你想要的东西。

在你的情况下,你可以做:

this.props.router.push("/newurl");

如果此组件由路由器呈现,则不需要将历史记录作为单独的属性传递。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46184284

复制
相关文章
在Mac上安装redis
注:在redis3.2之后,redis增加了protected-mode,在这个模式下,即使注释掉了bind 127.0.0.1,再访问redisd时候还是报错,需要把protected-mode yes改为protected-mode no
新人小试
2020/03/30
8K0
在Mac上安装MySQL
1、打开mysql官网:https://www.mysql.com/,选择DOWNLOADS下面的MySQL Community (GPL) Downloads »
新人小试
2020/03/30
8.5K0
在Mac上安装MySQL
在Mac上安装DNSmasq
首先你的 Mac 电脑需要安装了 Hombrew,安装链接:Install Homebrew
零云
2023/07/24
1.4K0
在Mac上安装consolas字体
Mac上一般不会预装consolas字体,但我习惯了,就是要用consolas字体。
JavaEdge
2021/02/23
2.2K0
Mac m1 安装Wine/WineHQ
在m1上安装尝试了比较多的教程,基本都失败了。直到看到这篇文章:https://git.boc-group.eu/adoxxosports/adoxx-15-64bit/-/blob/master/Installation%20Manual%20(M1)%20Wine%20und%20Azure%20SQL
obaby
2023/02/22
7.6K0
M1 Mac 安装Tensorflow
最近尝试在m1的mac上安装tensorflow,网上的教程比较多,但是不管怎么折腾都会出现各种问题。安装github上apple分支的TensorFlow不管怎么折腾都提示下面的错误:
obaby
2023/02/22
1.2K0
mac m1上运行jenkins
首先在docker官网上下载好支持m1版本的desktop客户端,随后打开jenkins.io查看安装命令:
gzq大数据
2021/10/26
2.5K0
在 Mac M1 的 GPU 上运行Stable-Diffusion
Stable Diffusion 是开源的,所以任何人都可以运行和修改它。这就是其在开源之后引发了大量创作热潮的原因。
点火三周
2022/10/18
7.8K2
在 Mac M1 的 GPU 上运行Stable-Diffusion
[教程]如何在M1 Mac上安装Windows 10和Linux?
早些时候,我们报道过开发者 Alex Graf 通过定制 QEMU 虚拟机在苹果 M1 Mac 上安装 Windows 10 操作系统的经验。过去两周,这个概念证明已经获得了许多开发者的帮助,包括虚拟音频和网络接口在内的许多功能都已基本正常,甚至可以让 Linux 虚拟机顺利运行。
huofo
2022/03/17
3.5K0
[教程]如何在M1 Mac上安装Windows 10和Linux?
在mac上安装Xgboost Python库
本文介绍了在mac系统上如何安装XGBoost Python库。文章首先介绍了使用pip install xgboost时出现的问题,然后介绍了使用Github源代码安装XGBoost的步骤。最后,作者通过运行build.sh脚本成功安装了XGBoost。
MachineLP
2018/01/09
2.4K0
手工在Docker for mac上安装Kubernetes
通常开发都是使用单机版的Docker环境,不太操心Docker集群的事情。 而在这种单机环境下,命令行操作Docker觉得很好用了,如果碰到解决不了的问题,还有脚本,如果说有什么事是一个脚本解决不了的。。。那就是两个。。。 :) 久而久之,很多事情都习惯了用Docker的角度去思考,比如服务发现、负载均衡,直接使用Docker的端口映射配合HAPROXY感觉就足够了。然后在这方面的知识也就固化在了这个点,再也没有更新。 而实际上Kubernetes大概每三个月发出一个新版本的速度,快速的
俺踏月色而来
2018/06/20
2.2K0
在mac上安装并使用docker
安装完毕,会在你的应用程序文件夹中生成一个boot2docker的app,运行他就会初始化docker了!
老高的技术博客
2022/12/28
1.9K0
在mac上安装并使用docker
Mac M1 上 丝滑跑 Docker
出于开源项目的需要,我准备把之前在 Windows 下运行的开源项目移植到 Mac 上跑得试下,但是之前 Mac M1 芯片并不能很好地支持 Docker,这不,发现 Docker 也正式支持 Mac 了,M1 看了 Docker 的芳容,竟悄悄爱上了 Docker。
悟空聊架构
2022/05/13
7.3K0
Mac M1 上 丝滑跑 Docker
Mac M1安装Homebrew记录
由于我是从老的MacBook Pro迁移到M1的,所以老的Homebrew版本在M1 ARM上已经不可用了。
yechaoa
2022/10/28
1.5K0
Mac M1安装Homebrew记录
mac /mac m1 安装 k8s
以前mac上k8s一直起不来,最近升级了一下docker for mac 的版本为3.2.2,对应k8s 版本为1.19.7 发现k8s 可用了
golangLeetcode
2022/08/02
2.3K0
mac /mac m1 安装 k8s
mac求生指南:在linux上安装scrapy
ERROR: Could not find a version that satisfies the requirement Twisted>=13.1.0 (from Scrapy) (from versions: none) ERROR: No matching distribution found for Twisted>=13.1.0 (from Scrapy)
李玺
2021/11/22
1.6K0
mac求生指南:在linux上安装scrapy
jupyter notebook 在mac OS上的安装
一、关于Anaconda python中有很多包,类似于java中的jar包,java中用maven、gradle来管理依赖的jar包,而在python中类似的工具就是anaconda(当然还有其它工具,但anaconda/conda比较流行)。直接到官网 https://www.anaconda.com/download/#macos 下载安装文件,一路next即可。安装完成后,一般会在 ~/anaconda/bin 下生成很多可执行的命令。 二、启动jupyter-notebook 进入anacond
菩提树下的杨过
2018/01/18
3.3K0
jupyter notebook 在mac OS上的安装
在自己的电脑上安装GitBook For Mac
之前写了一篇 在自己的服务器上安装GitBook ,发布于 2015-04-20,当时的安装环境是 CentOS 6.X_64Bit,今天想再研究一下这个 GitBook ,发现在基于 Linux 内核的机器上安装基础功能很简单,但是牵涉到生成 pdf/epub/mobi 格式的书籍时,安装calibre的代价非常大(因为要安装 N 多前置库),对于不是非常非常熟练使用 Linux 的用户,几乎是一种灾难。
他叫自己MR.张
2019/07/01
2.9K0
mac上安装软件_mac 安装软件
Mac下面除了用dmg、pkg来安装软件外,比较方便的还有用MacPorts来帮助你安装其他应用程序,跟BSD中的ports道理一样。MacPorts就像apt-get、yum一样,可以快速安装些软件。
全栈程序员站长
2022/11/08
2K0
在Mac OS X上安装PHP7
Mac用户可以选择二进制或源安装。实际上,您的OS X可能预装了Apache和PHP。这可能是一个相当旧的版本,它可能缺少许多不太常见的扩展。
用户9042463
2021/09/29
1.4K0

相似问题

反应本机安装[Mac M1]

15

M1 Mac或Swim本机安装

13

响应本机iOS构建失败- Mac M1

273

在Mac M1上安装Assimpcy

17

在m1 Mac上安装pymssql

17
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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