실제로 사용 사례에 따라 다릅니다.
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 />
먼저 사용하는 것 입니다. 특히 성능 때문에 생각합니다.