Насправді це залежить від вашого випадку використання.
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 />спочатку, я думаю, особливо через продуктивність.