¿Alguna forma de evitar que se /#/
muestre en la barra de direcciones del navegador cuando se usa react-router? Eso es con ReactJS. es decir, al hacer clic en los enlaces para ir a una nueva ruta se muestra localhost:3000/#/
o
localhost:3000/#/about
. Dependiendo de la ruta.
reactjs
react-router
Alce gigante
fuente
fuente
HashHistory
isoBrowserHistory
. Vea también esta pregunta SO donde doy mucha información de fondo sobre este tema.Respuestas:
Para las versiones 1, 2 y 3 de react-router, la forma correcta de establecer la ruta al esquema de mapeo de URL es pasando una implementación de historial en el
history
parámetro de<Router>
. De la documentación de historias :Versiones 2 y 3
En react-router 2 y 3, el código de configuración de su ruta se verá así:
Versión 1
En la versión 1.x, utilizará en su lugar lo siguiente:
Fuente: Guía de actualización de la versión 2.0
Versión 4
Para la próxima versión 4 de react-router, la sintaxis ha cambiado mucho y es necesario utilizarla
BrowserRouter
como etiqueta raíz del router.Source React Router Versión 4 Docs
fuente
history
es un paquete independiente que deberá instalar.browserHistory
en v2.x:import { browserHistory } from 'react-router' <Router history={browserHistory} />
Verifique la guía de actualización del enrutador reacthashHistory
, ¿hay alguna manera de deshacerse de este parámetro de consulta al final?http://localhost:8080/#/dashboard?_k=yqwtyu
Para la versión actual 0,11 y hacia adelante, es necesario agregar
Router.HistoryLocation
aRouter.run()
.<Routes>
ahora están en desuso. Consulte la Guía de actualización para la implementación de la ubicación de historial 0.12.x.fuente
Si no necesita admitir IE8, puede usar el historial del navegador y react-router usará en
window.pushState
lugar de configurar el hash.La forma exacta de hacer esto depende de la versión de React Router que esté utilizando:
fuente
<Routes location="history">
que todo funciona bien, hasta que actualice el navegador cuando esté en la ruta, es decirlocalhost:3000/about
, recibo un error 404. ¿Es eso esperado, estoy usandopython -m SimpleHTTPServer 3000
?/about
realmente carga su página raíz/
. De lo contrario, su servidor está tratando de buscar una ruta que coincida/about
y no encuentra nada (404). Personalmente, no uso Python, pero generalmente encuentra una ruta manual para/*
o/.*
->/
funciona - o podría ser algo llamadohtml5Mode
URL en la configuración de su servidor.De hecho, puede usar .htaccess para lograr esto. El navegador normalmente necesita el delimitador de la cadena de consulta
?
o#
para determinar dónde comienza la cadena de consulta y dónde terminan las rutas del directorio. El resultado final que queremos eswww.mysite.com/dir
Entonces, debemos detectar el problema antes de que el servidor web busque el directorio que cree que solicitamos/dir
. Entonces colocamos un.htaccess
archivo en la raíz del proyecto.Luego obtienes los parámetros de consulta con window.location.pathname
Luego puede evitar el uso de rutas de reacción si lo desea y simplemente manipular la URL y el historial del navegador si lo desea también. Espero que esto ayude a alguien...
fuente
Instale el paquete de historial
A continuación, importe createHistory y useBasename del historial
si la URL de su aplicación es www.example.com/myApp, entonces / root debería ser / myApp.
pasar la variable de historial al enrutador
Ahora, para todas sus etiquetas de enlace, agregue una "/" delante de todas las rutas.
La inspiración de la solución provino del ejemplo de React-Router que, desafortunadamente, no se documentó adecuadamente en su API.
fuente
Otra forma de manejar lo que se muestra después del hash (¡si no usa pushState!) Es crear su CustomLocation y cargarla en la creación de ReactRouter.
Por ejemplo, si desea que la URL de hashbang (¡así que con #!) Cumpla con las especificaciones de Google para el rastreo, puede crear un archivo HashbangLocation.js que copie principalmente la HashLocation original, como:
Tenga en cuenta la función slashToHashbang .
Entonces solo tienes que hacer
Y eso es :-)
fuente