선택적 경로 매개 변수가있는 반응 라우터


306

선택적 경로 매개 변수를 사용하여 경로를 선언하고 싶습니다. 따라서 페이지를 추가하면 추가 작업을 수행 할 수 있습니다 (예 : 데이터 채우기).

http : // localhost / app / path / to / page <= 페이지 렌더링 http : // localhost / app / path / to / page / pathParam <= pathParam 에 따라 일부 데이터가 포함 된 페이지 렌더링

내 반응 라우터에는 두 가지 옵션을 지원하기 위해 다음 경로가 있습니다 (간단한 예입니다).

<Router history={history}>    
   <Route path="/path" component={IndexPage}>
      <Route path="to/page" component={MyPage}/>
      <Route path="to/page/:pathParam" component={MyPage}/>
   </Route>    
</Router>

내 질문은 우리가 경로로 선언 할 수 있습니까? 두 번째 행만 추가하면 매개 변수가없는 경로를 찾을 수 없습니다.

편집 # 1 :

다음 구문에 대해 여기 에 언급 된 해결책이 효과 가 없었습니다. 맞습니까? 문서에 존재합니까?

<Route path="/product/:productName/?:urlID?" handler={SomeHandler} />

내 반응 라우터 버전은 1.0.3입니다.

답변:


650

게시 한 수정 사항은 이전 버전의 React-router (v0.13)에 유효하며 더 이상 작동하지 않습니다.


라우터 v1, v2 및 v3 반응

버전부터 1.0.0다음을 사용하여 선택적 매개 변수를 정의합니다.

<Route path="to/page(/:pathParam)" component={MyPage} />

여러 선택적 매개 변수의 경우 :

<Route path="to/page(/:pathParam1)(/:pathParam2)" component={MyPage} />

괄호 ( )를 사용 하여 슬래시 ( /)를 포함 하여 경로의 선택적 부분을 줄 바꿈합니다 . 공식 문서 의 경로 일치 안내서 페이지를 확인하십시오 .

참고 : 매개 변수는 다음에 URL 세그먼트를 일치 , 또는 . 경로 및 매개 변수에 대한 자세한 내용은 여기를 참조하십시오 .:paramName/?#


라우터 v4 이상 반응

React Router v4는 기본적으로 v1-v3과 다르며 선택적 경로 매개 변수는 공식 문서 에도 명시 적으로 정의되어 있지 않습니다 .

대신 정규 경로 경로가 이해 하는 path매개 변수 를 정의하라는 지시를 받습니다. 이를 통해 반복 패턴, 와일드 카드 등과 같이 경로를 정의 할 때 훨씬 유연하게 사용할 수 있습니다. 따라서 매개 변수를 선택적으로 정의하려면 후행 물음표 ( ) 를 추가하십시오 .?

따라서 선택적 매개 변수를 정의하려면 다음을 수행하십시오.

<Route path="/to/page/:pathParam?" component={MyPage} />

여러 선택적 매개 변수의 경우 :

<Route path="/to/page/:pathParam1?/:pathParam2?" component={MyPage} />

참고 : 반작용 라우터 V4는 호환되지 않는( 여기에서 더 읽으십시오 ). 대신 v3 이전 버전 (v2 권장)을 사용하십시오.


2
이것은 여전히 ​​URL의 여러 선택적 매개 변수에 대한 질문입니다./route(/:category/(:article)
Alex Shwarc

1
@AlexShwarc, 좋은 지적, 감사합니다. 여러 선택적 매개 변수를 보여주는 코드를 추가했습니다. 보세요
Chris

1
@Chris 확신합니다.이 방법으로 작동하지 않습니다. 확인 했습니까?
Alex Shwarc


1
기본 경로에 대한 선택적 경로 매개 변수를 작성할 수 있습니까? 예를 들어 경로에 언어 매개 변수를 추가해야하며 내 홈페이지 URL은 "/"및 "/ en"입니다. 여기 데모가 있습니다
Kholiavko

76

검색 후 여기에 도착하는 모든 React Router v4 사용자의 경우, 선택적 매개 변수 <Route>?접미사 로 표시 됩니다.

관련 문서는 다음과 같습니다.

https://reacttraining.com/react-router/web/api/Route/path-string

경로 : 문자열

정규식 경로가 이해 하는 유효한 URL 경로

<Route path="/users/:id" component={User}/>

https://www.npmjs.com/package/path-to-regexp#optional

선택 과목

매개 변수에 물음표 (?)를 붙여 매개 변수를 선택적으로 지정할 수 있습니다. 또한 접두사를 선택적으로 만듭니다.


페이지 번호를 사용하거나 사용하지 않고 액세스 할 수있는 사이트의 페이지 매김 섹션에 대한 간단한 예입니다.

<Route path="/section/:page?" component={Section} />

@ user2928231 감사합니다. 새 문서 URL로 업데이트되었습니다. 내가 알 수있는 한 <Match pattern />이제 <Route path />다시 말하지만 물음표 접미사는 선택적 매개 변수를 처리하기위한 접근법으로 남아 있습니다.
John

2
안녕! 나는 아직도 선택적 매개 변수에 문제가 있고 작업 다음 경로를 만들 수 없습니다 : 내가 가지고있는 players, players/123, players/123/edit, players?unseen=true. 선택적 매개 변수 ?unseen가 작동하지 않습니다. 이 토론에서 모든 수정을 시도했지만. 적절한 경로 문자열을 사용하여 도움을 줄 수 있습니까? 미리 감사드립니다!
Khrystyna Skvarok

안녕 @KhrystynaSkvarok, 선택적 쿼리 문자열 작동 / 경로를 얻는 방법을 알아 냈습니까? 나도 같은 일을하려고 해요
sabliao

2
트윗 담아 가기 실제 예제는 없지만 example.com/search?query=test다음 URL과 같은 URL 을 사용하십시오 /:search(search).
Khrystyna Skvarok

구분 기호 다음에 URL에서 매개 변수를 얻는 방법은 무엇입니까?
PHP 닌자

15

여러 선택적 매개 변수에 대한 작업 구문 :

<Route path="/section/(page)?/:page?/(sort)?/:sort?" component={Section} />

이제 URL은 다음과 같습니다.

  1. /부분
  2. / section / page / 1
  3. / section / page / 1 / sort / asc

1

반응 경로 V5 이상 에서는 다중 경로에 대해 아래 구문을 사용하십시오.

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