React Router의 동일한 구성 요소에 대한 여러 경로 이름


113

세 가지 경로에 동일한 구성 요소를 사용하고 있습니다.

<Router>
    <Route path="/home" component={Home} />
    <Route path="/users" component={Home} />
    <Route path="/widgets" component={Home} />
</Router>

어쨌든 그것을 결합하여 다음과 같이 할 수 있습니까?

<Router>
    <Route path=["/home", "/users", "/widgets"] component={Home} />
</Router>

2
react-router 4.4.0부터는 제안과 매우 유사한 방식으로 경로 배열을 지정할 수 있습니다. 여기에서 내 대답을 참조 하십시오 .
Ben Smith

답변:


137

react-router v4.4.0-beta.4 부터 공식적으로 v5.0.0에서는 이제 구성 요소로 확인되는 경로 배열을 지정할 수 있습니다.

<Router>
    <Route path={["/home", "/users", "/widgets"]} component={Home} />
</Router>

배열의 각 경로는 정규식 문자열입니다.

이 접근 방식에 대한 문서는 여기 에서 찾을 수 있습니다 .


5
이것이 최선의 답이라고 생각합니다. @Cameron의 답변은 어쨌든 완전한 정규 표현식 기능을 지원하지 않습니다 (적어도 할 수 없었습니다).
Christopher Regner

2
exact단일 경로에 대한 속성을 어떻게 설정 합니까?
JulianSoto

1
@JulianSoto 정확한 경로와 함께 하나의 단일 경로로 구성 요소에 대한 경로를 만듭니다. 그런 다음 정확한 속성이없는 경로 배열을 사용하여 동일한 구성 요소에 대한 다른 경로를 만들 수 있습니다.
Ben Smith

yarn upgrade4.3에서 4.4까지 할 수 없습니다 . 공식적으로 출시 되나요?
ndtreviv

@ndtreviv 반응 라우터 변경 로그를 살펴보면이 기능이 v4.4.0 베타 4에서 출시되었음을 알 수 있습니다.이 기능을 작성할 당시 v5.5.0 인 최신 버전으로 업그레이드하는 것이 좋습니다. "yarn upgrade react-router --latest"를 실행하면됩니다.
Ben Smith

115

최소한 react-router v4에서는 path정규식 문자열이 될 수 있으므로 다음과 같이 할 수 있습니다.

<Router>
    <Route path="/(home|users|widgets)/" component={Home} />
</Router>

보시다시피 약간 장황하기 때문에 component/ route가 이와 같이 간단 하다면 아마도 가치가 없을 것입니다.

물론 이것이 실제로 자주 발생하는 경우 항상 paths정규식 또는 .map논리를 재사용 할 수있는 배열 매개 변수를받는 래핑 구성 요소를 만들 수 있습니다 .


5
좋은 생각 @Cameron. 그룹 중 하나로 시작하는 경로 만 일치하도록 약간 수정하는 것이 유용하다는 것을 알았습니다. /^\/(home|users|widgets)/ 이제 /widgets일치하지만 /dashboard/widgets일치하지 않습니다.
Towler

4
훌륭해야하지만 지금은 유형 regex가 prop-types 유효성 검사에서 유효하지 않습니다 : Warning: Failed prop type: Invalid prop 경로`에 regexp제공된 유형의 경로 Route, 예상 됨 string.`
Fábio Paiva

@ FábioPaiva 그래 난 여전히 경로에 임의의 정규식을 넣는 방법을 알아 내지 못했습니다
Atav32

1
문자열로에 넣어<Route path="/(new|edit)/user/:id?" ... />
MEDV

2
작동하지 않음path={`/(${ROUTES.HOME}|${ROUTES.HOME_1})/`}
Murtaza Hussain

43

v4보다 낮은 버전의 React Router를 사용하는 경우에는 그렇지 않다고 생각합니다.

map하지만 다른 JSX 구성 요소와 마찬가지로를 사용할 수 있습니다 .

<Router>
    {["/home", "/users", "/widgets"].map((path, index) => 
        <Route path={path} component={Home} key={index} />
    )}
</Router>

편집하다

path-to-regexp 가 지원하는 한 react-router v4 의 경로 정규식을 사용할 수도 있습니다 . 자세한 내용은 @Cameron의 답변을 참조하십시오.


3
key소품을 잊지 마세요 .
신경 전달 물질

9
경로 (예 : / home => / users)에서 전환 할 때 (원치 않는 ...?) 다시 마운트됩니다.
Hertzel Guinness

과연! 선호도는 사용 사례와 구성 ​​요소에 따라 달라질 수 있습니다. 다시 마운트하지 않으려면 내 편집에 표시된대로 regexp를 사용하면 더 잘 작동 할 수 있습니다.
Christopher Chiche

5

react-route-dom v5.1.2부터 다음과 같이 여러 경로를 전달할 수 있습니다.

 <Route path={"/home" | "/users" | "/widgets"} component={Home} />

그리고 분명하게 Home jsx 파일을 맨 위에 가져와야합니다.


4

기타 옵션 : 경로 접두사를 사용합니다. /pages예를 들면. 당신은 얻을 것이다

  • /pages/home
  • /pages/users
  • /pages/widgets

그런 다음 Home구성 요소 내부에서 세부적으로 해결합니다 .

<Router>
  <Route path="/pages/" component={Home} />
</Router>

0

React Router 문서에 따르면 proptype 'path'는 string 유형이므로 Route Component에 소품으로 배열을 전달할 수있는 방법이 없습니다.

경로 만 변경하려는 경우 다른 경로에 대해 동일한 구성 요소를 사용할 수 있습니다.


1
경로가 이제 문자열 배열을 허용 하므로이 대답은 더 이상 정확하지 않습니다. 이 답변을 참조하십시오 .
Ben Smith

-1

react-router v4.4부터는 아래와 같이 할 수 있습니다.

경로를 변수에 저장하고 아래로 전달하고 '|'를 사용하십시오. 운영자.

let home = "/home" ;
let users = "/users”;
let widgets = "/widgets" ;

<Route path={ {home} | {users} | {widgets} }  component={Home} /> 

따라서 모든 경로에 대해 일치하는 것이 렌더링됩니다 component={Home}.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.