리액트 라우터를 사용하여 페이지를 리디렉션하는 가장 좋은 방법은 무엇입니까?
리액트 라우터는 처음 접해보고 페이지를 리다이렉트하는 방법은 여러 가지가 있습니다.
사용.
browserHistory.push("/path")
import { browserHistory } from 'react-router'; //do something... browserHistory.push("/path");
사용.
this.context.router.push("/path")
class Foo extends React.Component { constructor(props, context) { super(props, context); //do something... } redirect() { this.context.router.push("/path") } } Foo.contextTypes = { router: React.PropTypes.object }
리액트 라우터 v4에는
this.context.history.push("/path")
그리고.this.props.history.push("/path")
.세부사항:리액트 라우터 v4에서 이력 푸시 방법
이 옵션들 때문에 너무 혼란스러워요. 페이지를 리디렉션하는 가장 좋은 방법이 있을까요?
실제로 사용 사례에 따라 다릅니다.
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
소품. 자세한 내용은 With Router 공식 문서를 참조하십시오.
컴포넌트가 의 자식인 경우<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 />
첫째, 특히 성능 때문인 것 같아요.
react router dom 라이브러리 useHistory를 사용할 수도 있습니다.
import { useHistory } from "react-router-dom";
function HomeButton() {
let history = useHistory();
function handleClick() {
history.push("/home");
}
return (
<button type="button" onClick={handleClick}>
Go home
</button>
);
}
https://reactrouter.com/web/api/Hooks/usehistory
리액트 라우터를 사용하여v15.1
그 이후로는useHistory
후크, 이건 아주 간단하고 명확한 방법이야.다음은 소스 블로그의 간단한 예입니다.
import { useHistory } from "react-router-dom";
function BackButton({ children }) {
let history = useHistory()
return (
<button type="button" onClick={() => history.goBack()}>
{children}
</button>
)
}
이 기능은 모든 기능 컴포넌트 및 커스텀훅 내에서 사용할 수 있습니다.네, 이것은 다른 훅과 같은 클래스 컴포넌트에서는 동작하지 않습니다.
자세한 내용은 https://reacttraining.com/blog/react-router-v5-1/ #usehistory를 참조하십시오.
,Redirect
의 범위 내에서Route
다음과 같이 합니다.유효하지 않은 경로를 처리하기 위한 것입니다.
<Route path='*' render={() =>
(
<Redirect to="/error"/>
)
}/>
가장 간단한 방법 중 하나: 다음과 같이 링크를 사용합니다.
import { Link } from 'react-router-dom';
<Link to={`your-path`} activeClassName="current">{your-link-name}</Link>
전체 div 섹션을 링크로 포함하는 경우:
<div>
<Card as={Link} to={'path-name'}>
....
card content here
....
</Card>
</div>
언급URL : https://stackoverflow.com/questions/45089386/what-is-the-best-way-to-redirect-a-page-using-react-router
'source' 카테고리의 다른 글
스프링 부팅과 함께 React App을 사용할 때 React-Router 문제 발생 (0) | 2023.04.02 |
---|---|
AngularJS - $q 약속을 올바르게 해결하기 위해 $apply가 필요한 이유는 무엇입니까? (0) | 2023.04.02 |
스프링 부트 응용 프로그램을 재시작하지 않고 런타임에서 로그 수준을 변경하는 방법 (0) | 2023.04.02 |
WooCommerce 디스플레이 구매 품목만 (0) | 2023.04.02 |
정의되지 않은 'protocol' 속성을 읽을 수 없습니다. (0) | 2023.04.02 |