Ponieważ używam routera React do obsługi tras w aplikacji Reaguj, jestem ciekaw, czy istnieje sposób na przekierowanie do zasobu zewnętrznego.
Powiedz, że ktoś uderza:
example.com/privacy-policy
Chciałbym przekierować do:
example.zendesk.com/hc/en-us/articles/123456789-Privacy-Policies
Znajduję dokładnie zero pomocy w unikaniu pisania tego w zwykłym JS na moim index.html ładującym się za pomocą czegoś takiego:
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
źródło
źródło
window.location.href
aby mieć formalne przekierowanie.Odpowiedzi:
Oto jedna linijka dotycząca używania React Router do przekierowania do łącza zewnętrznego:
Wykorzystuje koncepcję czystego komponentu React, aby zredukować kod komponentu do pojedynczej funkcji, która zamiast renderować cokolwiek, przekierowuje przeglądarkę do zewnętrznego adresu URL.
Działa zarówno na React Router 3, jak i 4.
źródło
Nie ma potrzeby używania
<Link />
komponentu z routera reaktywnego.Jeśli chcesz przejść do linku zewnętrznego, użyj tagu kotwicy.
źródło
rel="noopener noreferrer"
do<a>
Skończyło się na zbudowaniu własnego komponentu.
<Redirect>
Pobiera informacje zreact-router
elementu, więc mogę je przechowywać w moich trasach. Jak na przykład:Oto mój komponent na wypadek, gdyby ktoś był ciekawy:
EDYCJA - UWAGA: To jest z
react-router: 3.0.5
, to nie jest takie proste w 4.xźródło
Nie ma potrzeby żądania odpowiedzi routera. Tę czynność można wykonać natywnie i zapewnia ją przeglądarka.
po prostu użyj
window.location
źródło
Z komponentem Link w React-router możesz to zrobić. W właściwości „ do ” możesz określić 3 typy danych:
Na przykład (link zewnętrzny):
https://example.zendesk.com/hc/en-us/articles/123456789-Privacy-Policies
Możesz wykonać następujące czynności:
Możesz również przekazywać rekwizyty, na których chcesz się znaleźć, takie jak tytuł, identyfikator, nazwa klasy itp.
źródło
Korzystając z niektórych informacji tutaj, wymyśliłem następujący komponent, którego możesz użyć w deklaracjach tras. Jest kompatybilny z React Router v4.
Używa maszynopisu, ale konwersja do natywnego javascript powinna być dość prosta:
I używaj z:
źródło
Miałem szczęście z tym:
źródło
Myślę, że React-Router nie zapewnia takiej obsługi. Dokumentacja wspomina
Można spróbować użyć czegoś podobnego React przekierowanie zamiast
źródło
Aby rozwinąć odpowiedź Alana, możesz utworzyć
<Route/>
przekierowanie wszystkich<Link/>
z atrybutami „do” zawierającymi „http:” lub „https:” do właściwego zasobu zewnętrznego.Poniżej znajduje się działający przykład, który można umieścić bezpośrednio w pliku
<Router>
.źródło
DLA V3, chociaż może działać dla V4. Wychodząc od odpowiedzi Erica, musiałem zrobić trochę więcej, na przykład zająć się rozwojem lokalnym, gdzie „http” nie występuje w adresie URL. Przekierowuję również do innej aplikacji na tym samym serwerze.
Dodano do pliku routera:
A komponent:
źródło
Używając Reacta z Typescript, otrzymujesz błąd, ponieważ funkcja musi zwrócić element reakcji, a nie
void
. Zrobiłem to w ten sposób, używając metody renderowania trasy (i używając routera React v4):Gdzie można również użyć zamiast
window.location.assign()
,window.location.replace()
etcźródło
Jeśli używasz renderowania po stronie serwera, możesz użyć
StaticRouter
. Za pomocą swojegocontext
as,props
a następnie dodając<Redirect path="/somewhere" />
komponent do swojej aplikacji. Chodzi o to, że za każdym razem, gdy reakcja-router dopasuje komponent przekierowania, doda coś do kontekstu przekazanego do routera statycznego, aby poinformować cię, że twoja ścieżka pasuje do komponentu przekierowania. teraz, gdy wiesz, że trafiłeś w przekierowanie, wystarczy sprawdzić, czy to przekierowanie, którego szukasz. następnie po prostu przekieruj przez serwer.ctx.redirect('https://example/com')
.źródło
<Redirect push={ true } to="/pathtoredirect" />
Udało mi się uzyskać przekierowanie w React-router-dom za pomocą następującego
W moim przypadku szukałem sposobu na przekierowanie użytkowników za każdym razem, gdy odwiedzają główny adres URL
http://myapp.com
do innego miejsca w aplikacjihttp://myapp.com/newplace
. więc powyższe pomogło.źródło