Czy jest jakiś sposób, aby zapobiec /#/
wyświetlaniu się w pasku adresu przeglądarki podczas korzystania z React-router? Tak jest z ReactJS. tzn. kliknięcie linków, aby przejść do nowej trasy pokazuje localhost:3000/#/
lub
localhost:3000/#/about
. W zależności od trasy.
reactjs
react-router
Gigantyczny łoś
źródło
źródło
HashHistory
isoBrowserHistory
. Zobacz także to pytanie SO, w którym podaję wiele ogólnych informacji na ten temat.Odpowiedzi:
W przypadku wersji 1, 2 i 3 React-router prawidłowym sposobem ustawiania trasy do schematu mapowania adresów URL jest przekazanie implementacji historii do
history
parametru<Router>
. Z dokumentacji historycznej :Wersje 2 i 3
W routerach reakcji 2 i 3 kod konfiguracji trasy będzie wyglądał mniej więcej tak:
Wersja 1
W wersji 1.x zamiast tego użyjesz:
Źródło: przewodnik aktualizacji do wersji 2.0
Wersja 4
W nadchodzącej wersji 4 reakcji-routera składnia uległa znacznej zmianie i wymagane jest użycie
BrowserRouter
jako znacznika głównego routera.Source React Router wersja 4 Docs
źródło
history
jest to samodzielny pakiet, który musisz zainstalować.browserHistory
w v2.x:import { browserHistory } from 'react-router' <Router history={browserHistory} />
Sprawdź przewodnik aktualizacjihashHistory
czy istnieje sposób na pozbycie się tego parametru zapytania na końcu?http://localhost:8080/#/dashboard?_k=yqwtyu
W przypadku aktualnej wersji 0.11 i nowszych musisz dodać
Router.HistoryLocation
doRouter.run()
.<Routes>
są teraz przestarzałe. Zapoznaj się z podręcznikiem aktualizacji, aby zapoznać się z implementacją wersji 0.12.x HistoryLocation.źródło
Jeśli nie potrzebujesz obsługi IE8, możesz użyć historii przeglądarki, a reakcja routera użyje
window.pushState
zamiast ustawiania skrótu.Jak to zrobić, zależy od używanej wersji React Router:
źródło
<Routes location="history">
że wszystko działa OK, dopóki nie odświeżysz przeglądarki na trasie czylilocalhost:3000/about
wtedy wyskakuje mi błąd 404. Czy to jest oczekiwane, używampython -m SimpleHTTPServer 3000
?/about
faktycznie ładuje twoją stronę główną/
. W przeciwnym razie serwer próbuje szukać pasującej trasy/about
i nic nie znajduje (404). Osobiście nie używam Pythona, ale zwykle znajdujesz ręczną trasę dla/*
lub/.*
->/
działa - lub może to być coś, co nazywa sięhtml5Mode
adresami URL w ustawieniach serwera.Aby to osiągnąć, możesz użyć .htaccess. Przeglądarka zwykle potrzebuje ogranicznika ciągu zapytania
?
lub#
określenia, gdzie zaczyna się ciąg zapytania i kończą się ścieżki katalogu. Wynik końcowy, jakiego oczekujemy, jestwww.mysite.com/dir
taki, więc musimy wykryć problem, zanim serwer sieciowy wyszuka katalog, o który według niego prosiliśmy/dir
. Więc umieszczamy.htaccess
plik w katalogu głównym projektu.Następnie uzyskujesz parametry zapytania z window.location.pathname
Możesz wtedy uniknąć korzystania z tras reakcji, jeśli chcesz, i po prostu manipulować adresem URL i historią przeglądarki, jeśli chcesz. Mam nadzieję, że to komuś pomoże ...
źródło
Zainstaluj pakiet historii
Następnie zaimportuj z historii createHistory i useBasename
jeśli adres URL Twojej aplikacji to www.example.com/myApp, wówczas / root powinno brzmieć / myApp.
przekazać zmienną historii do routera
Teraz dla wszystkich tagów Link dodaj „/” przed wszystkimi ścieżkami.
Inspiracją dla rozwiązania był przykład React-Router, który niestety nie został odpowiednio udokumentowany w ich API.
źródło
Innym sposobem obsługi tego, co ma być wyświetlane po hashu (więc jeśli nie używasz pushState!), Jest utworzenie CustomLocation i załadowanie go podczas tworzenia ReactRouter.
Na przykład, jeśli chcesz, aby adres URL z hashbangiem (a więc z #!) Był zgodny ze specyfikacjami Google dotyczącymi indeksowania, możesz utworzyć plik HashbangLocation.js, który kopiuje głównie oryginalny HashLocation, taki jak:
Zwróć uwagę na funkcję slashToHashbang .
Po prostu musisz to zrobić
I to wszystko :-)
źródło