通常であればユーザーが<Link>
を押して、それぞれ<Route>
に割り当てられているコンポーネントを表示するが、コンポーネントの発生させるイベントに連動して<Route>
に割り当てられているコンポーネントをプログラム的に遷移表示(<Link>
を押した時と同じ挙動)にさせる場合
方法1 - 囲む
イベントが発生するコンポーネントを<Link>
で囲む
<link to="/path">
<SomeComponent onTouchTap={() => console.log("event!")}>
</link>
これだとイベントの内容に応じてリンクさせるかどうかの判断が出来ない
方法2 - pushする
handler(){
//...何らかの処理
//...
if(ok){
this.props.history.push("/path")
}
}
//...
//...
<SomeComponent onTouchTap={() => this.handler}>
これだとサーバーに/path
がヒットしてしまう(結果、リロードする形になる)
方法3(解決方法)
handler(){
//...何らかの処理
//...
if(ok){
const location = {
pathname: "/path",
state: { fromDashboard: true }
}
this.props.history.push(location)
}
}
//...
//...
<SomeComponent onTouchTap={() => this.handler}>
locationオブジェクトをpushする
こうする事により<Link>
をクリックしたようにサーバーにヒットせずに画面遷移がプログラム的に出来る
