¿Cómo recargo una página con react-router?

4 minutos de lectura

Avatar de usuario del alguacil
Alguacil

Puedo ver en este archivo (https://github.com/ReactTraining/react-router/blob/v0.13.3/modules/createRouter.js) que hay una función de actualización pero no tengo idea de cómo llamarla. Soy bastante nuevo en el enrutador de reacción, solo lo he usado para moverme entre algunas páginas un par de veces usando hashHistory.

En este momento, estoy tratando de usarlo para que cuando falle una instalación, el usuario tenga la opción de ‘reintentar’, que planeo ejecutar actualizando la página donde ocurre la instalación (la página en la que el usuario estaría actualmente). Cualquier ayuda sería apreciada.

Esta es una aplicación de nodo que se ejecuta en electrones, no en una aplicación web.

avatar de usuario de sambalicious
sambalicioso

en primer lugar, agregue react-router como una dependencia

`yarn add react-router` or `npm install react-router`

import { useHistory } from 'react-router'

const history = useHistory()

/////then add this to the function that is called for re-rendering

history.go(0)

Esto hace que su página se vuelva a renderizar automáticamente

Para el enrutador de reacción V6, use el enlace useNavigate en su lugar

import { useNavigate } from 'react-router'

const navegar = useNavegar()

navegar(0)

  • esto funciona si tiene una cookie que se elimina en un evento onClick que maneja su estado de autenticación, con history.go() Me desconecto según lo previsto y me empujan a la pantalla de inicio de sesión. No funcionó según lo previsto para mí con las otras respuestas …

    – Lucas Reppe Welander

    8 de junio de 2020 a las 9:10

  • No es realmente un enfoque SPA. Creo que esta recomendación debe ser criticada.

    – Ott

    31 oct 2021 a las 18:43

  • Estoy creando una aplicación web con React y Express.js, y esta sugerencia me funcionó de maravilla. Salud

    – Giovanni Pizzato

    17 de noviembre de 2021 a las 12:30

  • No funciona con react-router v6 (probado navigate(0)).

    – Andrei

    29 de julio de 2022 a las 8:26

Si está utilizando react-router v6

import { useNavigate } from "react-router-dom";

const navigate = useNavigate();

const refreshPage = () => {
    navigate(0);
}

Avatar de usuario de Sumit Kumar
sumit kumar

Puede usar esto para actualizar la ruta actual:

import createHistory from 'history/createBrowserHistory'
const history = createHistory();
history.go(0)

  • esto hace que se vuelva a cargar la página completa

    – Alexey L.

    20 de noviembre de 2019 a las 14:21

  • Algo similar si está usando ganchos: esto funciona para useHistory de react-router-dom. Pero sí, recargar completamente la página

    – Julian

    5 de agosto de 2021 a las 20:01

Realmente no necesitas react-router para esto. solo puedes usar location.reload:

location.reload();

Además, la versión de react-router a la que se vinculó es muy antigua, creo que se está vinculando a v1 cuando actualmente está en v4.

Avatar de usuario de Darko Pranjic
darko pranjic

Supongo que estás usando react-router. Copio mi respuesta de otro post. Entonces, tiene pocas posibilidades de hacerlo, actualmente mi forma favorita de hacerlo es usar la función anónima en el componente prop:

<Switch>
  <Route exact path="https://stackoverflow.com/" component={()=><HomeContainer/>} />
  <Route exact path="/file/:itemPath/:refHash" component={()=><File/>} />
  <Route exact path="/:folderName" component ={()=><Folder/>}/>
</Switch>

O si desea actualizar con los parámetros de URL actuales, necesitará una ruta adicional (recargar) y jugar un poco con la pila del enrutador:

reload = ()=>{
 const current = props.location.pathname;
 this.props.history.replace(`/reload`);
    setTimeout(() => {
      this.props.history.replace(current);
    });
}

<Switch>
  <Route path="/reload" component={null} key="reload" />
  <Route exact path="https://stackoverflow.com/" component={HomeContainer} />
  <Route exact path="/file/:itemPath/:refHash" component={File} />
  <Route exact path="/:folderName" component ={Folder}/>
</Switch>

<div onClick={this.reload}>Reload</div>

  • Por que es setTimeout requerido aquí?

    – Dawson B.

    29 de agosto de 2019 a las 18:34


  • @DawsonB No lo sé, pero no funciona sin él… jajaja

    – Newoda

    30 sep 2020 a las 16:57

avatar de usuario de ahmetsadri
ahmetsadri

Reaccionar

window.location.reload();

laboral

  • Por que es setTimeout requerido aquí?

    – Dawson B.

    29 de agosto de 2019 a las 18:34


  • @DawsonB No lo sé, pero no funciona sin él… jajaja

    – Newoda

    30 sep 2020 a las 16:57

Avatar de usuario de SaimumIslam27
SaimumIslam27

si desea volver a obtener los datos, simplemente haga lo siguiente:

import { useLocation } from 'react-router'

const location = useLocation()

useEffect(() => {
  fetchData()
}, [location.key])

  • dulce solución!

    – lloyd agola

    4 de abril de 2022 a las 12:57

¿Ha sido útil esta solución?