Saya ingin menampilkan title
in <AppBar />
yang entah bagaimana dilewatkan dari rute saat ini.
Di React Router v4, bagaimana <AppBar />
bisa mendapatkan rute saat ini dilewatkan ke title
prop itu?
<Router basename='/app'>
<main>
<Menu active={menu} close={this.closeMenu} />
<Overlay active={menu} onClick={this.closeMenu} />
<AppBar handleMenuIcon={this.handleMenuIcon} title='Test' />
<Route path='/customers' component={Customers} />
</main>
</Router>
Apakah ada cara untuk melewati judul kustom dari kustom prop
pada <Route />
?
reactjs
react-router
react-router-v4
Raphael Rafatpanah
sumber
sumber
Jawaban:
Dalam rilis 5.1-router bereaksi ada hook yang disebut useLocation , yang mengembalikan objek lokasi saat ini. Ini mungkin berguna kapan saja Anda perlu mengetahui URL saat ini.
sumber
redirect
digunakan. ini akan membaca jalan sebelum arahan ulangDalam bereaksi router 4 rute saat ini di -
this.props.location.pathname
. Dapatkanthis.props
dan verifikasi. Jika Anda masih tidak melihatlocation.pathname
maka Anda harus menggunakan dekoratorwithRouter
.Ini mungkin terlihat seperti ini:
sumber
window.location.pathname
Jika Anda menggunakan templat reaksi, di mana akhir file reaksi Anda terlihat seperti ini:
export default SomeComponent
Anda perlu menggunakan komponen orde tinggi (sering disebut sebagai "HOC")withRouter
,.Pertama, Anda harus mengimpor
withRouter
seperti:Selanjutnya, Anda akan ingin menggunakan
withRouter
. Anda dapat melakukan ini dengan mengubah ekspor komponen Anda. Kemungkinan Anda ingin berubah dariexport default ComponentName
menjadiexport default withRouter(ComponentName)
.Kemudian Anda bisa mendapatkan rute (dan informasi lainnya) dari properti. Secara khusus,
location
,match
, danhistory
. Kode untuk memuntahkan pathname adalah:Langgan yang baik dengan informasi tambahan tersedia di sini: https://reacttraining.com/react-router/core/guides/philosophy
sumber
Berikut ini adalah solusi menggunakan
history
Baca lebih lanjutdi dalam Router
sumber
this.props....
pun itu hanya kebisingan di telinga kita.Ada hook yang disebut useLocation di react-router v5, tidak perlu untuk HOC atau hal-hal lain, sangat ringkas dan nyaman.
sumber
Saya pikir penulis React Router (v4) baru saja menambahkan bahwa withRouter HOC untuk menenangkan pengguna tertentu. Namun, saya percaya pendekatan yang lebih baik adalah dengan hanya menggunakan render prop dan membuat komponen PropsRoute sederhana yang melewati alat peraga tersebut. Ini lebih mudah untuk diuji karena Anda tidak "menghubungkan" komponen seperti withRouter. Memiliki banyak komponen bersarang yang dibungkus denganouter dan itu tidak akan menyenangkan. Manfaat lain adalah Anda juga dapat menggunakan pass ini melalui alat peraga apa pun yang Anda inginkan ke Rute. Inilah contoh sederhana menggunakan render prop. (cukup banyak contoh persis dari situs web mereka https://reacttraining.com/react-router/web/api/Route/render-func ) (src / komponen / rute / alat peraga-rute)
penggunaan: (pemberitahuan untuk mendapatkan params rute (match.params) Anda cukup menggunakan komponen ini dan itu akan diteruskan untuk Anda)
juga perhatikan bahwa Anda dapat melewati alat peraga tambahan apa pun yang Anda inginkan dengan cara ini juga
sumber
Memiliki Con Posidielov mengatakan, rute saat hadir dalam
this.props.location.pathname
.Tetapi jika Anda ingin mencocokkan bidang yang lebih spesifik seperti kunci (atau nama), Anda dapat menggunakan matchPath untuk menemukan referensi rute asli.
sumber
Menambahkan
Kemudian ubah ekspor komponen Anda
Kemudian Anda dapat mengakses rute langsung di dalam komponen itu sendiri (tanpa menyentuh apa pun di proyek Anda) menggunakan:
Diuji Maret 2020 dengan: "versi": "5.1.2"
sumber