without w3schools recargar react how example change cambiar javascript html5-history

javascript - w3schools - Cambiar URL sin actualizar la página



react change url without reload (2)

Me gustaría reemplazar una URL sin actualizar la página.

Necesito cambiar:

https://example.com/en/step1

a

https://example.com/en/step2

Como hacer eso ?


Cuando usas una función ...

<p onclick="update_url(''/en/step2'');">Link</p> <script> function update_url(url) { history.pushState(null, null, url); } </script>


Actualizar

Basado en Manipular el historial del navegador , pasar la cadena vacía como segundo parámetro del método pushState ( también conocido como título ) debería ser seguro contra cambios futuros en el método, por lo que es mejor usar pushState como:

history.pushState(null, '''', ''/en/step2'');

Puedes leer más sobre eso en el artículo mencionado.

Respuesta original

Utilice history.pushState esta manera:

history.pushState(null, null, ''/en/step2'');

Actualización para responder al comentario de Idan Dagan .

P: ¿Por qué no usar history.replaceState() ?

A: De MDN

history.replaceState () funciona exactamente igual que history.pushState (), excepto que replaceState () modifica la entrada del historial actual en lugar de crear una nueva

Eso significa que si usa replaceState , sí se replaceState la URL, pero el usuario no puede usar el botón Atrás del navegador para regresar a la versión anterior. Estado (s) más ( porque replaceState no agrega una nueva entrada al historial ) y no se recomienda y proporciona UX incorrecto.

Actualizar para agregar window.onpopstate

Entonces, como esta respuesta llamó su atención, aquí hay información adicional sobre cómo manipular el historial del navegador, después de usar pushState , puede detectar la navegación hacia atrás / adelante mediante el uso de window.onpopstate como este:

window.onpopstate = function(e) { // ... };

Como el primer argumento de pushState es un objeto, si pasó un object lugar de un null , puede acceder a ese objeto en onpopstate cual es muy útil. A continuación le onpopstate cómo:

window.onpopstate = function(e) { if(e.state) { console.log(e.state); } };