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