gpt4 book ai didi

javascript - react 路由器 : access history in rendered Route component

转载 作者:数据小太阳 更新时间:2023-10-29 06:09:46 24 4
gpt4 key购买 nike

我知道有很多关于此的问题,但我似乎无法让它工作:我需要从通过路由呈现的子组件访问“历史记录”。 (它从 redux 容器接收 Prop )。

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

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

我的代码是这样的:

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>
)
}
}

最佳答案

当您使用 render 时你实际上得到了 Prop 。在文档中,他们有一个这样的例子:

<Route {...rest} render={props => (
<FadeIn>
<Component {...props}/>
</FadeIn>
)}/>

因此您应该能够从这些 Prop 中访问历史记录。

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

// in your components render function.. 
if(this.state.shouldRedirect) {
return (<Redirect to={yourURL} />);
}

关于javascript - react 路由器 : access history in rendered Route component,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46184284/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com