オプションのパスパラメーターを持つReactルーター


306

オプションのパスパラメーターを使用してパスを宣言したいので、ページを追加すると、何かを追加する(たとえば、データを入力する)ことができます。

http:// localhost / app / path / to / page <= ページをレンダリングします http:// localhost / app / path / to / page / pathParam <= pathParamに従ってデータをページにレンダリングします

私の反応ルータでは、2つのオプションをサポートするために、次のパスがあります(これは簡略化された例です)。

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

私の質問は、1つのルートで宣言できるかどうかです。2行目のみを追加すると、パラメーターのないルートが見つかりません。

編集#1:

次の構文についてここで述べ解決策は私にとってうまくいきませんでした、それは適切なものですか?ドキュメントに存在しますか?

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

私の反応ルーターのバージョンは:1.0.3

回答:


650

あなたが投稿した編集は、古いバージョンのReact-router(v0.13)で有効であり、動作しなくなりました。


React Router v1、v2、v3

バージョン以降1.0.0、オプションのパラメータは次のように定義します。

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

および複数のオプションのパラメーター:

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

括弧( )を使用して、先頭のスラッシュ()を含むルートのオプション部分をラップします/。をチェック公式ドキュメントルートマッチングガイドのページをご覧ください。

注: パラメータは、次のURLセグメントアップに一致するまたは特にパスとパラメータの詳細については、:paramName/?#こちらをご覧ください


React Router v4以降

React Router v4はv1-v3とは根本的に異なり、オプションのパスパラメータは明示的に定義されていません 公式ドキュメントでも。

代わりに、regexpへのパスをpath指定するパラメーターを定義するように指示されます。理解。これにより、繰り返しパターン、ワイルドカードなどのパスを定義する際の柔軟性が大幅に向上します。したがって、パラメーターをオプションとして定義するには、末尾に疑問符(?)を追加します。

そのため、オプションのパラメーターを定義するには、次のようにします。

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

および複数のオプションのパラメーター:

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

注: React Router v4は互換性のない詳細はこちら)。代わりに、バージョンv3以前(v2推奨)を使用してください。


2
これはまだのようなURLで複数のオプションのparams、についての質問です/route(/:category/(:article)
アレックスShwarc

1
@AlexShwarc、良い点、ありがとう。複数のオプションパラメータを示すコードを追加しました。見てください。
Chrisが

1
@クリスきっと、このように動かないのですが、確認しましたか?
Alex Shwarc 2017

@Chrisと3バージョン
Alex Shwarc 2017

1
メインルートへのオプションのパスパラメータを作成できますか?たとえば、パスに言語パラメーターを追加する必要があり、私のホームページのURLは "/"と "/ en"になります。ここにデモがあります
Kholiavko

76

検索後にここに到着するすべてのReact Router v4ユーザーの場合、aのオプションパラメータに<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 />、これは再びですが、疑問符のサフィックスは、オプションのパラメーターを処理するためのアプローチのままです。
ジョン

2
こんにちは!私はまだオプションのパラメータに問題があり、作業の次のルートを作ることができない:私が持っていますplayersplayers/123players/123/editplayers?unseen=true。オプションのパラメーター?unseenは機能しません。私はこの議論からすべての修正を試みましたが。これを処理する適切なパス文字列を手伝っていただけませんか?前もって感謝します!
Khrystyna Skvarok 2017

こんにちは@KhrystynaSkvarok、オプションのクエリ文字列を使用してパスを取得する方法を理解したことがありますか?私も同じことをしようとしています
sabliao

2
@sabliaoこんにちは!実用的な例はありませんが、URLのexample.com/search?query=test場合は次のパターンを使用してみてください/: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

react-router V5以降では、複数のパスの構文の下で使用します

<Route
          exact
          path={[path1, path2]}
          component={component}
        />
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.