実際には、ユースケースによって異なります。
1)権限のないユーザーからルートを保護したい
その場合は、呼び出されたコンポーネントを使用して<Redirect />
、次のロジックを実装できます。
import React from 'react'
import { Redirect } from 'react-router-dom'
const ProtectedComponent = () => {
if (authFails)
return <Redirect to='/login' />
}
return <div> My Protected Component </div>
}
<Redirect />
期待した方法で作業したい場合は、コンポーネントのrenderメソッド内に配置して、最終的にDOM要素と見なされるようにしてください。そうしないと機能しません。
2)特定のアクションの後でリダイレクトしたい場合(アイテムの作成後など)
その場合、履歴を使用できます。
myFunction() {
addSomeStuff(data).then(() => {
this.props.history.push('/path')
}).catch((error) => {
console.log(error)
})
または
myFunction() {
addSomeStuff()
this.props.history.push('/path')
}
履歴にアクセスするために、と呼ばれるHOCでコンポーネントをラップできますwithRouter
。あなたがそれであなたのコンポーネントを包むとき、それは合格しmatch
location
、そしてhistory
支えます。詳細については、withRouterの公式ドキュメントをご覧ください。
あなたのコンポーネントはの子である場合は<Route />
コンポーネント、すなわち、それはのようなものであれば<Route path='/path' component={myComponent} />
、あなたがあなたのコンポーネントをラップする必要はありませんwithRouter
ので、<Route />
パスmatch
、location
およびhistory
その子に。
3)いくつかの要素をクリックした後にリダイレクト
ここには2つのオプションがあります。イベントにhistory.push()
渡すことで使用できますonClick
。
<div onClick={this.props.history.push('/path')}> some stuff </div>
または、<Link />
コンポーネントを使用できます。
<Link to='/path' > some stuff </Link>
この場合の経験則は、<Link />
最初に使用することだと思います。特にパフォーマンスが原因です。