まず、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
など私はあなたが使用する必要はありませんだと思うref
V4ともう。やってみようthis.props.history.push('/template');