Adakah cara untuk mencegah agar tidak /#/
muncul di bilah alamat browser saat menggunakan react-router? Itu dengan ReactJS. yaitu Mengklik link untuk pergi ke acara rute baru localhost:3000/#/
atau
localhost:3000/#/about
. Tergantung rutenya.
reactjs
react-router
Rusa Raksasa
sumber
sumber
HashHistory
isoBrowserHistory
. Lihat juga pertanyaan SO ini di mana saya memberikan banyak info latar belakang tentang hal ini.Jawaban:
Untuk versi 1, 2, dan 3 dari react-router, cara yang benar untuk menyetel rute ke skema pemetaan URL adalah dengan meneruskan implementasi riwayat ke
history
parameter<Router>
. Dari dokumentasi sejarah :Versi 2 dan 3
Di react-router 2 dan 3, kode konfigurasi rute Anda akan terlihat seperti ini:
Versi 1
Di versi 1.x, Anda akan menggunakan yang berikut ini:
Sumber: Panduan Peningkatan Versi 2.0
Versi 4
Untuk react-router versi 4 yang akan datang, sintaksnya telah banyak berubah dan yang diperlukan adalah menggunakannya
BrowserRouter
sebagai tag root router.Sumber React Router Versi 4 Docs
sumber
history
adalah paket berdiri sendiri Anda harus menginstal.browserHistory
di v2.x:import { browserHistory } from 'react-router' <Router history={browserHistory} />
Periksa panduan peningkatan react-routerhashHistory
, apakah ada cara untuk menghilangkan parameter kueri ini di akhir?http://localhost:8080/#/dashboard?_k=yqwtyu
Untuk versi saat ini 0.11 dan seterusnya, Anda perlu menambahkan
Router.HistoryLocation
keRouter.run()
.<Routes>
sekarang tidak lagi digunakan. Lihat Panduan Upgrade untuk implementasi HistoryLocation 0.12.x.sumber
Jika Anda tidak perlu mendukung IE8, Anda dapat menggunakan Riwayat Browser dan react-router akan menggunakan
window.pushState
alih-alih menyetel hash.Bagaimana tepatnya melakukan ini tergantung pada versi React Router yang Anda gunakan:
sumber
<Routes location="history">
semuanya berfungsi dengan baik, sampai Anda menyegarkan browser saat dalam perjalanan yaitulocalhost:3000/about
saya mendapatkan kesalahan 404. Apakah itu yang diharapkan, saya menggunakanpython -m SimpleHTTPServer 3000
?/about
benar - benar memuat halaman root Anda/
. Jika tidak, server Anda mencoba mencari rute yang cocok/about
dan tidak menemukan apa pun (404). Saya pribadi tidak menggunakan python tetapi Anda biasanya menemukan rute manual untuk/*
atau/.*
->/
berfungsi - atau mungkin sesuatu yang disebuthtml5Mode
url di pengaturan server Anda.Anda sebenarnya dapat menggunakan .htaccess untuk melakukannya. Browser biasanya memerlukan pemisah string kueri
?
atau#
untuk menentukan di mana string kueri dimulai dan jalur direktori berakhir. Hasil akhir yang kami inginkan adalahwww.mysite.com/dir
Jadi kami perlu menangkap masalah sebelum server web mencari direktori yang menurutnya kami minta/dir
. Jadi kami menempatkan.htaccess
file di root proyek.Kemudian Anda mendapatkan parameter kueri dengan window.location.pathname
Anda kemudian dapat menghindari menggunakan rute react jika Anda mau dan hanya memanipulasi url dan riwayat browser jika Anda mau. Semoga ini membantu seseorang ...
sumber
Instal paket riwayat
Selanjutnya impor createHistory dan useBasename dari riwayat
jika url aplikasi Anda adalah www.example.com/myApp, maka / root harus / myApp.
meneruskan variabel history ke Router
Sekarang untuk semua tag Tautan Anda, tambahkan "/" di depan semua jalur.
Inspirasi solusi datang dari Contoh React-Router Yang sayangnya, tidak didokumentasikan dengan baik di API mereka.
sumber
Cara lain untuk menangani apa yang akan ditampilkan setelah hash (jadi jika Anda tidak menggunakan pushState!) Adalah dengan membuat CustomLocation Anda dan memuatnya saat pembuatan ReactRouter.
Misalnya, jika Anda ingin memiliki hashbang url (jadi dengan #!) Untuk mematuhi spesifikasi google untuk perayapan, Anda dapat membuat file HashbangLocation.js yang terutama menyalin HashLocation asli seperti:
Perhatikan fungsi slashToHashbang .
Maka Anda harus melakukannya
Dan hanya itu :-)
sumber