React Router에서 DefaultRoute를 다른 경로로 설정하는 방법


98

다음이 있습니다.

  <Route name="app" path="/" handler={App}>
    <Route name="dashboards" path="dashboards" handler={Dashboard}>
      <Route name="exploreDashboard" path="exploreDashboard" handler={ExploreDashboard} />
      <Route name="searchDashboard" path="searchDashboard" handler={SearchDashboard} />
      <DefaultRoute handler={DashboardExplain} />
    </Route>
    <DefaultRoute handler={SearchDashboard} />
  </Route>

DefaultRoute를 사용할 때 모든 * Dashboard가 Dashboard 내에서 렌더링되어야하므로 SearchDashboard가 잘못 렌더링됩니다.

"app"Route 내의 DefaultRoute가 Route "searchDashboard"를 가리 키도록하고 싶습니다. 이것이 내가 React Router로 할 수있는 일입니까, 아니면 일반적인 Javascript (페이지 리디렉션 용)를 사용해야합니까?

기본적으로 사용자가 홈 페이지로 이동하면 대신 검색 대시 보드로 보내려고합니다. 그래서 저는 다음과 같은 React Router 기능을 찾고 있다고 생각합니다.window.location.replace("mygreathostname.com/#/dashboards/searchDashboard");


1
DefaultRoute 대신 Redirect를 사용해 보셨습니까? <Redirect from = "/"to = "searchDashboard"/>
Jonatan Lundqvist Medén 2015

@ JonatanLundqvistMedén 정확히 내가 찾고 있던 것입니다, 감사합니다! 답으로 작성하고 정답으로 표시하겠습니다. 응답이 지연되어 죄송합니다.
Matthew Herbst

답변:


148

DefaultRoute 대신 Redirect를 사용할 수 있습니다.

<Redirect from="/" to="searchDashboard" />

업데이트 문제를 피하기 위해 2019-08-09 업데이트 대신 Ogglas 덕분에 이것을 사용하십시오.

<Redirect exact from="/" to="searchDashboard" />

6
그것은 나뿐입니까, 아니면 이것을 사용하여 깊은 URL을 직접 치는 경우, 나는 항상 내가 공격하려는 경로 대신 "to"URL로 리디렉션됩니까?
Pablote 2017-04-17

와 같은 리디렉션을 수행하는 경우 from='/a' to='/a/:id'를 사용 <Switch>하여 react-router 의 <Redirect><Route>구성 요소 를 포함해야 합니다. 자세한 내용은 문서를
Kulbear

1
@Kulbear 나는 같은 문제가 있었다. Ogglas가 그의 대답에서 말한 것을 수행하면 효과가 있습니다.
Alan P.

2
그것은이 마지막이 경로를 넣어 당신에게 가장 가능성이 필요성을 일하거나 할 수 있도록합니다<Redirect exact from="/" to="/adaptation" />
DarkWalker

감독하기 쉽기 때문에 반복합니다. DarkWalker의 리디렉션 규칙에서 중요한 부분은 exact플래그입니다. acceptet 답변에는이 질문이 없으므로 [거의] 모든 경로와 일치합니다.
dube

55

사용시 문제 <Redirect from="/" to="searchDashboard" />는 다른 URL이 /indexDashboard있고 사용자가 새로 고침을 누르거나 URL이 전송되면 사용자가 /searchDashboard어쨌든 리디렉션된다는 것입니다.

사용자가 사이트를 새로 고치거나 URL을 보낼 수 없도록하려면 다음을 사용하십시오.

<Route exact path="/" render={() => (
    <Redirect to="/searchDashboard"/>
)}/>

searchDashboard로그인 뒤에있는 경우 사용 :

<Route exact path="/" render={() => (
  loggedIn ? (
    <Redirect to="/searchDashboard"/>
  ) : (
    <Redirect to="/login"/>
  )
)}/>

37

다음을 사용하여 기본 경로를 잘못 만들려고했습니다.

<IndexRoute component={DefaultComponent} />
<Route path="/default-path" component={DefaultComponent} />

그러나 이것은 동일한 구성 요소를 렌더링하는 두 개의 다른 경로를 만듭니다. 이것은 무의미 할뿐만 아니라 .NET <Link/>기반 요소를 스타일링 할 때 UI에 결함을 일으킬 수 있습니다 this.history.isActive().

기본 경로 (인덱스 경로가 아님)를 만드는 올바른 방법은 다음을 사용하는 것입니다 <IndexRedirect/>.

<IndexRedirect to="/default-path" />
<Route path="/default-path" component={DefaultComponent} />

이것은 react-router 1.0.0을 기반으로합니다. https://github.com/rackt/react-router/blob/master/modules/IndexRedirect.js를 참조 하십시오 .


당신 Route이 이미 처리 한 무언가를 갖는 것이 요점은 무엇입니까 IndexRoute?
Matthew Herbst 2015

1
요점이 없으며 나는 그것을 옹호하지 않는다는 것을 분명히하기 위해 내 대답을 편집했습니다.
Seth

이것은 내가했던 일이기도하지만, /예를 들어 리디렉션하는 대신 구성 요소 (내 홈페이지)를 제공하는 솔루션을 좋아합니다 /home.
ericsoco

<IndexRoute>결국 내가 찾고있는 것 같습니다 . 소음 죄송합니다. stackoverflow.com/questions/32706913/... github.com/reactjs/react-router/blob/master/docs/guides/...
ericsoco

11

Jonathan의 대답은 저에게 효과가없는 것 같습니다. React v0.14.0과 React Router v1.0.0-rc3을 사용하고 있습니다. 이것은 :

<IndexRoute component={Home}/>.

따라서 Matthew의 경우에는 그가 원할 것이라고 생각합니다.

<IndexRoute component={SearchDashboard}/>.

출처 : https://github.com/rackt/react-router/blob/master/docs/guides/advanced/ComponentLifecycle.md


공유 해주셔서 감사합니다. 저는 React v0.13과 React-Router 버전을 사용하고 있었으므로 1.0 / rc 이전 버전이었습니다. 이것이 다른 사람들에게 도움이되기를 바랍니다!
Matthew Herbst 2015 년

이것은 당신이 맥락을 잃게 만든다고 생각합니다. SearchDashboard은 홈페이지에 도착했을 때 보게 될 Dashboard구성 요소 이지만 으로 직접 이동하면이를 래핑 하는 구성 요소가 아닙니다 /dashboard/searchDashboard. React-router는 URL과 일치하는 경로를 기반으로 중첩 된 구성 요소의 계층을 동적으로 구축하므로 여기에서 리디렉션이 필요하다고 생각합니다.
Stijn de Witt

6
import { Route, Redirect } from "react-router-dom";

class App extends Component {
  render() {
    return (
      <div>
        <Route path='/'>
          <Redirect to="/something" />
        </Route>
//rest of code here

이렇게하면 로컬 호스트에서 서버를로드 할 때 / something으로 리디렉션됩니다.


5

업데이트 : 2020

리디렉션을 사용하는 대신 단순히 여러 경로를 path

예:

<Route exact path={["/","/defaultPath"]} component={searchDashboard} />

3

비슷한 문제가 발생했습니다. 일치하는 경로 처리기가 없으면 기본 경로 처리기를 원했습니다.

내 솔루션은 와일드 카드를 경로 값으로 사용하는 것입니다. 즉, 경로 정의의 마지막 항목인지 확인하십시오.

<Route path="/" component={App} >
    <IndexRoute component={HomePage} />
    <Route path="about" component={AboutPage} />
    <Route path="home" component={HomePage} />
    <Route path="*" component={HomePage} />
</Route>

3

2017 년에 접어 들면 다음과 같은 새로운 솔루션이 제공됩니다 IndexRedirect.

<Route path="/" component={App}>
  <IndexRedirect to="/welcome" />
  <Route path="welcome" component={Welcome} />
  <Route path="about" component={About} />
</Route>

2
 <Route name="app" path="/" handler={App}>
    <Route name="dashboards" path="dashboards" handler={Dashboard}>
      <Route name="exploreDashboard" path="exploreDashboard" handler={ExploreDashboard} />
      <Route name="searchDashboard" path="searchDashboard" handler={SearchDashboard} />
      <DefaultRoute handler={DashboardExplain} />
    </Route>
    <Redirect from="/*" to="/" />
  </Route>

v4 DefaultRoute에서 와 동등한 것은 무엇입니까 react-router?
안토니 홍콩

4
@AnthonyKong 나는 그것이 생각한다 : <Route exact path="/" component={Home}/>. reacttraining.com/react-router/web/example/basic
TYMG

1

선호하는 방법은 반응 라우터 IndexRoutes 구성 요소 를 사용하는 것입니다.

다음과 같이 사용합니다 (위에 링크 된 반응 라우터 문서에서 가져옴).

<Route path="/" component={App}>
    <IndexRedirect to="/welcome" />
    <Route path="welcome" component={Welcome} />
    <Route path="about" component={About} />
</Route>

0

이렇게 사용하여 특정 URL에서 리디렉션하고 이전 라우터에서 새 라우터로 리디렉션 한 후 구성 요소를 렌더링합니다.

<Route path="/old-router">
  <Redirect exact to="/new-router"/>
  <Route path="/new-router" component={NewRouterType}/>
</Route>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.