Karena saya menggunakan react-router untuk menangani rute saya di aplikasi react, saya ingin tahu apakah ada cara untuk mengalihkan ke sumber daya eksternal.
Katakanlah seseorang memukul:
example.com/privacy-policy
Saya ingin ini dialihkan ke:
example.zendesk.com/hc/en-us/articles/123456789-Privacy-Policies
Saya menemukan tidak ada bantuan dalam menghindari menulisnya dalam JS biasa di index.html saya memuat dengan sesuatu seperti:
if ( window.location.path === "privacy-policy" ){
window.location = "example.zendesk.com/hc/en-us/articles/123456789-Privacy-Policies"
}
javascript
reactjs
redirect
react-router
react-router-redux
Eric Hodonsky
sumber
sumber
window.location.href
untuk memiliki pengalihan formal.Jawaban:
Berikut ini satu baris untuk menggunakan React Router untuk mengarahkan ke tautan eksternal:
Ia menggunakan konsep komponen murni React untuk mengurangi kode komponen menjadi satu fungsi yang, alih-alih merender apa pun, mengalihkan browser ke URL eksternal.
Bekerja baik pada React Router 3 dan 4.
sumber
Tidak perlu menggunakan
<Link />
komponen dari react-router.Jika Anda ingin pergi ke tautan eksternal, gunakan tag jangkar.
sumber
rel="noopener noreferrer"
ke<a>
Saya akhirnya membangun Komponen saya sendiri.
<Redirect>
Dibutuhkan info darireact-router
elemen sehingga saya bisa menyimpannya di rute saya. Seperti:Berikut adalah komponen saya, siapa pun yang penasaran:
EDIT - CATATAN: Ini dengan
react-router: 3.0.5
, tidak sesederhana itu di 4.x.sumber
Itu tidak perlu meminta router react. Tindakan ini dapat dilakukan secara native dan disediakan oleh browser.
gunakan saja
window.location
sumber
Dengan komponen Link dari react-router Anda dapat melakukan itu. Di prop " ke " Anda dapat menentukan 3 jenis data:
Untuk contoh Anda (tautan eksternal):
https://example.zendesk.com/hc/en-us/articles/123456789-Privacy-Policies
Anda dapat melakukan hal berikut:
Anda juga dapat mengirimkan props yang Anda inginkan seperti title, id, className, dll.
sumber
Menggunakan beberapa info di sini, saya datang dengan komponen berikut yang dapat Anda gunakan dalam deklarasi rute Anda. Ini kompatibel dengan React Router v4.
Ini menggunakan skrip jenis, tetapi harus cukup mudah untuk dikonversi ke javascript asli:
Dan gunakan dengan:
sumber
Saya beruntung dengan ini:
sumber
Saya tidak berpikir React-Router menyediakan dukungan ini. The dokumentasi menyebutkan
Anda dapat mencoba menggunakan sesuatu seperti React-Redirect sebagai gantinya
sumber
Untuk memperluas jawaban Alan, Anda dapat membuat
<Route/>
yang mengalihkan semua<Link/>
dengan atribut "ke" yang berisi 'http:' atau 'https:' ke sumber daya eksternal yang benar.Di bawah ini adalah contoh kerja yang dapat ditempatkan langsung ke file
<Router>
.sumber
UNTUK V3, meskipun mungkin bekerja untuk V4. Keluar dari jawaban Eric, saya perlu melakukan lebih banyak, seperti menangani pengembangan lokal di mana 'http' tidak ada di url. Saya juga mengalihkan ke aplikasi lain di server yang sama.
Ditambahkan ke file router:
Dan Komponennya:
sumber
Menggunakan React with Typescript Anda mendapatkan kesalahan karena fungsinya harus mengembalikan elemen react, bukan
void
. Jadi saya melakukannya dengan cara ini menggunakan metode render Route (dan menggunakan React router v4):Di mana Anda juga bisa menggunakan
window.location.assign()
,window.location.replace()
dllsumber
Jika Anda menggunakan rending sisi server, Anda dapat menggunakan
StaticRouter
. Dengancontext
sebagai Andaprops
dan kemudian menambahkan<Redirect path="/somewhere" />
komponen di aplikasi Anda. Idenya adalah setiap react-router cocok dengan komponen redirect, itu akan menambahkan sesuatu ke dalam konteks yang Anda berikan ke router statis untuk memberi tahu Anda bahwa jalur Anda cocok dengan komponen pengalihan. Sekarang setelah Anda tahu bahwa Anda menekan redirect, Anda hanya perlu memeriksa apakah itu pengalihan yang Anda cari. lalu alihkan melalui server.ctx.redirect('https://example/com')
.sumber
<Redirect push={ true } to="/pathtoredirect" />
Saya dapat mencapai pengalihan di react-router-dom menggunakan yang berikut ini
Untuk kasus saya, saya sedang mencari cara untuk mengarahkan pengguna setiap kali mereka mengunjungi URL root
http://myapp.com
ke tempat lain di dalam aplikasihttp://myapp.com/newplace
. jadi hal di atas membantu.sumber