Saya menggunakan komponen yang sama untuk tiga rute berbeda:
<Router>
<Route path="/home" component={Home} />
<Route path="/users" component={Home} />
<Route path="/widgets" component={Home} />
</Router>
Apakah ada cara untuk menggabungkannya, menjadi seperti:
<Router>
<Route path=["/home", "/users", "/widgets"] component={Home} />
</Router>
javascript
reactjs
path
react-router
url-routing
Chetan Garg
sumber
sumber
Jawaban:
Mulai react-router v4.4.0-beta.4 , dan secara resmi di v5.0.0, Anda sekarang dapat menentukan larik jalur yang menyelesaikan komponen misalnya
Setiap jalur dalam larik adalah string ekspresi reguler.
Dokumentasi untuk pendekatan ini dapat ditemukan di sini .
sumber
exact
atribut untuk satu jalur?yarn upgrade
dari 4.3 hingga 4.4. Apakah ini resmi dirilis?Setidaknya dengan react-router v4
path
bisa menjadi string ekspresi reguler, jadi Anda bisa melakukan sesuatu seperti ini:Seperti yang Anda lihat, ini agak bertele-tele jadi jika
component
/ Andaroute
sederhana seperti ini mungkin tidak sepadan.Dan tentu saja jika ini benar-benar sering muncul, Anda selalu dapat membuat komponen pembungkus yang menggunakan
paths
parameter array , yang melakukan regex atau.map
logika yang dapat digunakan kembali.sumber
/^\/(home|users|widgets)/
Sekarang,/widgets
akan cocok, tetapi/dashboard/widgets
tidak akan cocok.Warning: Failed prop type: Invalid prop
jalur` tiperegexp
disediakan keRoute
, diharapkanstring
.`<Route path="/(new|edit)/user/:id?" ... />
path={`/(${ROUTES.HOME}|${ROUTES.HOME_1})/`}
Saya rasa tidak demikian jika Anda menggunakan versi React Router yang lebih rendah dari v4.
Anda dapat menggunakan a
map
seperti yang akan Anda lakukan dengan komponen JSX lainnya:EDIT
Anda juga dapat menggunakan regex untuk jalur di react-router v4 selama itu didukung oleh path-to-regexp . Lihat jawaban @ Cameron untuk info lebih lanjut.
sumber
key
prop.Pada react-route-dom v5.1.2 Anda dapat melewati beberapa jalur seperti di bawah ini
Dan jelas Anda perlu mengimpor file jsx Home di atas.
sumber
Pilihan lain: gunakan awalan rute.
/pages
sebagai contoh. Kamu akan mendapatkan/pages/home
/pages/users
/pages/widgets
Dan kemudian selesaikan dengan cara mendetail di dalam
Home
komponen.sumber
Sesuai dengan dokumentasi React Router, proptype 'path' adalah bertipe string. Jadi tidak mungkin Anda melewatkan array sebagai props ke Route Component.
Jika niat Anda hanya mengubah rute, Anda dapat menggunakan komponen yang sama untuk rute berbeda tanpa masalah
sumber
Pada react-router v4.4 Anda bisa melakukan sesuatu seperti ini di bawah ini.
simpan path dalam variabel dan turunkan di bawah dan gunakan '|' Operator.
jadi untuk semua jalur itu cocok itu akan membuat
component={Home}
yang Anda butuhkan ..sumber