jai*_*fps 5 javascript reactjs react-router
我知道有很多问题,但我似乎无法让它工作:我需要从通过路由呈现的子组件访问"历史".(它从redux容器接收道具).
我需要将历史对象传递给在每个Route中呈现的组件,以便我可以this.props.history.push('/route')在子组件中.之前这个应用程序的动态性较差,所以每个Route都用一个硬编码component={someComponent}; 但我发现在动态执行路由时,您需要使用render={() => <someComponent />}.
在将路由更改component={}为render={() => ...}I之后,在子组件中丢失了历史记录.
我的代码是这样的:
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>
)
}
}
Run Code Online (Sandbox Code Playgroud)
当你使用时,render你实际上得到道具.在文档中,他们有一个这样的例子:
<Route {...rest} render={props => (
<FadeIn>
<Component {...props}/>
</FadeIn>
)}/>
Run Code Online (Sandbox Code Playgroud)
因此,您应该能够从这些道具中访问历史记录.
另一种解决方案是有条件地渲染<Redirect/>组件.所以也许你有一些你使用的内部状态:
// in your components render function..
if(this.state.shouldRedirect) {
return (<Redirect to={yourURL} />);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1318 次 |
| 最近记录: |