まず、var r = this;これを行う必要はありません。これif statementは、コールバック自体のコンテキストを参照しているためです。これは、矢印関数を使用しているため、Reactコンポーネントのコンテキストを参照しているためです。
ドキュメントによると:
履歴オブジェクトには通常、次のプロパティとメソッドがあります。
したがって、ナビゲート中に、次のように小道具を履歴オブジェクトに渡すことができます
this.props.history.push({
pathname: '/template',
search: '?query=abc',
state: { detail: response.data }
})
または同様のためのLinkコンポーネントまたはRedirectコンポーネント
<Link to={{
pathname: '/template',
search: '?query=abc',
state: { detail: response.data }
}}> My Link </Link>
そして、/templateルートでレンダリングされたコンポーネントでは、次のように渡されたプロップにアクセスできます
this.props.location.state.detail
また、小道具の履歴または位置オブジェクトを使用する場合は、コンポーネントをに接続する必要があることにも注意してくださいwithRouter。
ドキュメントによると:
withRouter
高次コンポーネントを<Route>'s介して、履歴オブジェクトのプロパティと最も近い一致にアクセスでき
withRouterます。withRouter
renderと同じプロップでルートが変更されるたびに、コンポーネントを再レンダリングし<Route>ますprops: { match, location, history }。
Routeへのアクセス権を持っている必要がありthis.props.location、this.props.historyなど私はあなたが使用する必要はありませんだと思うrefV4ともう。やってみようthis.props.history.push('/template');