Насправді це залежить від вашого випадку використання.
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 />
працювати так, як ви очікуєте, вам слід помістити його всередину методу візуалізації вашого компонента, щоб з часом його можна було розглядати як елемент 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) Переспрямування після натискання на якийсь елемент
Тут є два варіанти. Ви можете використовувати history.push()
, передавши його onClick
події:
<div onClick={this.props.history.push('/path')}> some stuff </div>
або ви можете використовувати <Link />
компонент:
<Link to='/path' > some stuff </Link>
Я думаю, що основне правило в цьому випадку полягає в тому, щоб спробувати використовувати <Link />
спочатку, я думаю, особливо через продуктивність.