Saya ingin menyatakan jalan dengan opsional jalan parameter, maka ketika saya menambahkan halaman untuk melakukan sesuatu yang ekstra (misalnya mengisi beberapa data):
http://localhost/app/path/to/page <= membuat halaman http://localhost/app/path/to/page/pathParam <= membuat halaman dengan beberapa data menurut pathParam
Saya bereaksi router saya memiliki jalan berikut, dalam rangka mendukung dua pilihan (ini adalah contoh sederhana):
<Router history={history}>
<Route path="/path" component={IndexPage}>
<Route path="to/page" component={MyPage}/>
<Route path="to/page/:pathParam" component={MyPage}/>
</Route>
</Router>
Pertanyaan saya adalah, kita dapat menyatakan hal itu di one route? Jika saya hanya menambahkan baris kedua kemudian rute tanpa parameter tidak ditemukan.
EDIT#1:
Solusi disebutkan di sini tentang sintaks berikut tidak bekerja untuk saya, adalah hal yang tepat? Apakah itu ada dalam dokumentasi?
<Route path="/product/:productName/?:urlID?" handler={SomeHandler} />
Saya bereaksi-router versi: 1.0.3
Edit anda diposting berlaku untuk versi yang lebih tua dari Bereaksi-router (v0.13) dan doesn't bekerja lagi.
Sejak versi 1.0.0
anda menentukan parameter opsional dengan:
<Route path="to/page(/:pathParam)" component={MyPage} />
dan untuk beberapa opsional parameter:
<Route path="to/page(/:pathParam1)(/:pathParam2)" component={MyPage} />
Anda menggunakan tanda kurung (
)
untuk membungkus bagian opsional dari rute, termasuk terkemuka slash (/
). Check out Rute Pencocokan Panduan halaman dokumentasi resmi.
Catatan: The :paramName
parameter pertandingan URL segmen ke depan /
, ?
, atau #
. Untuk lebih lanjut tentang jalur dan params khusus, baca lebih lanjut di sini.
Bereaksi Router v4 secara fundamental berbeda dari v1-v3, dan opsional jalan parameter aren't didefinisikan secara eksplisit dalam dokumentasi resmi baik.
Sebaliknya, anda diperintahkan untuk mendefinisikan path
parameter yang path-to-regexp memahami. Hal ini memungkinkan banyak fleksibilitas yang lebih besar dalam menentukan jalan anda, seperti pola berulang, wildcard, dll. Jadi untuk menentukan parameter sebagai opsional anda tambahkan trailing tanda tanya (?
).
Karena itu, untuk mendefinisikan sebuah parameter opsional, anda lakukan:
<Route path="/to/page/:pathParam?" component={MyPage} />
dan untuk beberapa opsional parameter:
<Route path="/to/page/:pathParam1?/:pathParam2?" component={MyPage} />
Catatan: Bereaksi Router v4 adalah tidak kompatibel dengan [tag:bereaksi-router-relay] (baca lebih lanjut di sini). Menggunakan versi v3 atau sebelumnya (v2 dianjurkan) sebagai gantinya.
Untuk setiap Bereaksi Router v4 pengguna tiba di sini setelah pencarian, parameter opsional dalam <Rute>
dilambangkan dengan ?
akhiran.
Berikut ini's dokumentasi yang relevan:
https://reacttraining.com/react-router/web/api/Route/path-string
jalan: string
URL yang valid path yang path-to-regexp memahami.
https://www.npmjs.com/package/path-to-regexp#optional
Opsional
Parameter dapat diakhiri dengan tanda tanya (?) untuk membuat parameter opsional. Ini juga akan membuat awalan opsional.
Contoh sederhana dari paginasi bagian dari sebuah situs yang dapat diakses dengan atau tanpa nomor halaman.
<Route path="/section/:page?" component={Section} />
Kerja sintaks untuk beberapa opsional params:
<Route path="/section/(page)?/:page?/(sort)?/:sort?" component={Section} />
Sekarang, url dapat: