Vreau să declar un drum cu o cale opțională parametru, prin urmare, atunci când am adăuga la pagină pentru a face ceva în plus (de exemplu, umple unele date):
http://localhost/app/path/to/page <= randa pagina http://localhost/app/path/to/page/pathParam <= randa pagina cu unele date potrivit pathParam
În reacționa router am următoarele căi, în scopul de a sprijini cele două opțiuni (acesta este un exemplu simplificat):
<Router history={history}>
<Route path="/path" component={IndexPage}>
<Route path="to/page" component={MyPage}/>
<Route path="to/page/:pathParam" component={MyPage}/>
</Route>
</Router>
Intrebarea mea este, putem declara că în o traseu? Dacă am adăuga doar al doilea rând, atunci traseul fără parametrul nu este găsit.
EDIT#1:
Soluția menționată aici despre următoarea sintaxă nu au de lucru pentru mine, este unul adecvat? Nu mai există în documentație?
<Route path="/product/:productName/?:urlID?" handler={SomeHandler} />
Meu reacționa-router versiune: 1.0.3
Edit ai postat a fost valabil pentru o versiune mai veche de a Reacționa-router (v0.13) și nu't mai funcționează.
Începând cu versiunea 1.0.0` ai defini parametrii opționali cu:
<Route path="to/page(/:pathParam)" component={MyPage} />
și pentru multiple opțional parametri:
<Route path="to/page(/:pathParam1)(/:pathParam2)" component={MyPage} />
Utilizați paranteza (
)
pentru a încheia piese opționale de rută, inclusiv lider slash (/
). Check out [Traseu de Potrivire Ghid**]1 pagina de documentația oficială.
Notă: S:paramName
parametru corespunde un URL segment până la următoarea /
, ?
, sau #
. Pentru mai multe detalii despre trasee și params special, citește mai mult aici.
Reacționează Router v4 este fundamental diferită decât v1-v3, și opțional calea parametri sunt't în mod explicit definite în documente oficiale fie.
În schimb, vă sunt instruiți pentru a defini o "cale" parametru care cale-să-regexp înțelege. Acest lucru permite o mult mai mare flexibilitate în definirea căi, cum ar fi modele repetitive, metacaractere, etc. Deci, pentru a defini un parametru opțional poți adăuga un final semnului de întrebare (?
).
Ca atare, pentru a defini un parametru opțional, puteți face:
<Route path="/to/page/:pathParam?" component={MyPage} />
și pentru multiple opțional parametri:
<Route path="/to/page/:pathParam1?/:pathParam2?" component={MyPage} />
Notă: Reacționa Router v4 este incompatibil cu [tag:reacționează-router-releu] (citește mai mult aici). Utilizați versiunea v3 sau mai devreme (v2 recomandat) în loc.
Pentru orice Reacționa Router v4 utilizatorii care sosesc aici după o căutare, parametri opționali într-o <Trecere>
sunt notate cu un ?
sufix.
Aici's documentației relevante:
https://reacttraining.com/react-router/web/api/Route/path-string
cale: string
Orice adresă URL validă calea care cale-să-regexp a se înțelege.
https://www.npmjs.com/package/path-to-regexp#optional
Opțional
Parametrii pot fi cu terminația un semn de întrebare (?) pentru a face parametru opțional. Acest lucru va face, de asemenea, prefix opțional.
Exemplu simplu de o paginat secțiune a unui site care poate fi accesat cu sau fără un număr de pagină.
<Route path="/section/:page?" component={Section} />
Lucru sintaxa pentru mai multe opționale params:
<Route path="/section/(page)?/:page?/(sort)?/:sort?" component={Section} />
Acum, url-ul poate fi: