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