Saya telah berpikir dan saya bingung dengan routing antara Client dan Server. Misalkan saya menggunakan ReactJS untuk rendering sisi server sebelum mengirim permintaan kembali ke browser web, dan menggunakan react-router sebagai perutean sisi klien untuk beralih antar halaman tanpa menyegarkan sebagai SPA.
Yang terlintas dalam pikiran adalah:
- Bagaimana rute diinterpretasikan? Misalnya, permintaan dari halaman Beranda (
/home
) ke halaman Posting (/posts
) - Ke mana perginya perutean, di sisi server atau klien?
- Bagaimana cara mengetahui cara memprosesnya?
javascript
reactjs
routes
react-router
url-routing
heartmon
sumber
sumber
Jawaban:
Catatan, jawaban ini mencakup React Router versi 0.13.x - versi 1.0 yang akan datang sepertinya akan memiliki detail implementasi yang sangat berbeda
Server
Ini minimal
server.js
dengan react-router:Di mana
routes
modul mengekspor daftar Rute:Setiap kali permintaan dibuat ke server, Anda membuat
Router
instance sekali pakai yang dikonfigurasi dengan URL masuk sebagai lokasi statisnya, yang diselesaikan terhadap pohon rute untuk menyiapkan rute yang cocok dan sesuai, memanggil kembali dengan level teratas penangan rute yang akan dirender dan catatan tentang rute turunan yang cocok di setiap tingkat. Inilah yang dikonsultasikan saat Anda menggunakan<RouteHandler>
komponen dalam komponen penanganan rute untuk merender rute anak yang cocok.Jika pengguna menonaktifkan JavaScript, atau lambat dalam memuat, tautan apa pun yang mereka klik akan masuk ke server lagi, yang diselesaikan lagi seperti di atas.
Klien
Ini minimal
client.js
dengan react-router (menggunakan kembali modul routes yang sama):Saat Anda memanggil
Router.run()
, itu membuat instance Router untuk Anda di belakang layar, yang digunakan kembali setiap kali Anda menavigasi aplikasi, karena URL dapat menjadi dinamis pada klien, bukan di server di mana satu permintaan memiliki URL tetap.Dalam hal ini, kami menggunakan
HistoryLocation
, yang menggunakanHistory
API untuk memastikan hal yang benar terjadi saat Anda menekan tombol kembali / maju. Ada jugaHashLocation
yang mengubah URLhash
untuk membuat entri sejarah dan mendengarkanwindow.onhashchange
acara untuk memicu navigasi.Bila Anda menggunakan bereaksi-router
<Link>
komponen, Anda memberikanto
prop yang merupakan nama dari rute, ditambahparams
danquery
data kebutuhan rute. The<a>
diberikan oleh komponen ini memilikionClick
handler yang akhirnya panggilanrouter.transitionTo()
pada contoh router dengan alat peraga yang Anda berikan link, yang terlihat seperti ini:Untuk tautan biasa, ini pada akhirnya memanggil
location.push()
jenis Lokasi mana pun yang Anda gunakan, yang menangani detail pengaturan riwayat sehingga menavigasi dengan tombol kembali dan maju akan berfungsi, kemudian memanggil kembali kerouter.handleLocationChange()
untuk memberi tahu router bahwa ia dapat melanjutkan dengan transisi ke jalur URL baru.Router kemudian memanggil
router.dispatch()
metodenya sendiri dengan URL baru, yang menangani detail penentuan rute yang dikonfigurasi mana yang cocok dengan URL, kemudian memanggil setiap hook transisi yang ada untuk rute yang cocok. Anda dapat menerapkan hook transisi ini pada salah satu penangan rute Anda untuk mengambil tindakan saat rute akan dinavigasi menjauh atau dinavigasi, dengan kemampuan untuk membatalkan transisi jika hal-hal tidak sesuai dengan keinginan Anda.Jika transisi tidak dibatalkan, langkah terakhir adalah memanggil callback yang Anda berikan
Router.run()
dengan komponen pengendali level teratas dan objek status dengan semua detail URL dan rute yang cocok. Komponen pengendali tingkat atas sebenarnya adalahRouter
instance itu sendiri, yang menangani rendering pengendali rute paling atas yang cocok.Proses di atas dijalankan ulang setiap kali Anda menavigasi ke URL baru di klien.
Contoh proyek
sumber
var routes = require('./routes')
Apakah ini daftar rute? Saya telah menggunakan router Express tetapi contoh ini di SO tampaknya menjadi satu-satunya contoh pengaturan rendering sisi server dengan React Router, jadi akan lebih baik jika itu adalah contoh kode lengkapreact-router
versi yang lebih baru . Harap perbarui.Dengan 1.0, React-Router bergantung pada modul history sebagai peerDependency. Modul ini berhubungan dengan perutean di browser. Secara default, React-Router menggunakan API Riwayat HTML5 (
pushState
,replaceState
), tetapi Anda dapat mengkonfigurasinya untuk menggunakan perutean berbasis hash (lihat di bawah)Penanganan rute sekarang dilakukan di belakang layar, dan ReactRouter mengirim props baru ke penangan Route saat rute berubah. Router memiliki
onUpdate
callback prop baru setiap kali rute berubah, berguna untuk pelacakan tampilan halaman, atau memperbarui<title>
, misalnya.Klien (perutean HTML5)
Klien (perutean berbasis hash)
Server
Di server, kita bisa menggunakan
ReactRouter.match
, ini diambil dari panduan rendering serversumber