これについてはいくつか質問がありますが、私はそれを動作させるようには見えません。ルート経由でレンダリングされる子コンポーネントから「履歴」にアクセスする必要があります。 (それはredux容器から小道具を受け取る)。React Router:レンダリングされたルートコンポーネントのアクセス履歴
ヒストリオブジェクトを各ルートでレンダリングされるコンポーネントに渡す必要があるため、子コンポーネント内にthis.props.history.push('/route')
を追加できます。このアプリケーションはあまり動的ではなかったので、各ルートはcomponent={someComponent}
でハードコードされていました。しかし、私は、ルートを動的に行うには、render={() => <someComponent />}
を使用する必要があることを発見しました。
ルートをcomponent={}
からrender={() => ...}
に変更した後、子コンポーネントの履歴が失われました。あなたが実際に小道具を取得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>
)
}
}
私は、リダイレクトをあまりにも多くのハックだと思うことは避けています。 Routeのレンダリングのパラメータとして小道具を置くだけで、私が必要とした解決策でした。 'render = {({history})=> }'は私の解決策です。助けてくれてありがとう! –
jaimefps
私は参照してください。どういたしまして!それを聞いてうれしい助けて! :) – jonahe