Wie lade ich eine Seite mit React-Router neu?

Lesezeit: 3 Minuten

Benutzeravatar des Sheriffs
Sheriff

Ich kann in dieser Datei sehen (https://github.com/ReactTraining/react-router/blob/v0.13.3/modules/createRouter.js), dass es eine Aktualisierungsfunktion gibt, aber ich habe keine Ahnung, wie ich sie aufrufen soll. Ich bin ziemlich neu im React-Router, ich habe ihn nur verwendet, um ein paar Mal mit hashHistory zwischen einigen Seiten zu wechseln.

Im Moment versuche ich, es so zu verwenden, dass der Benutzer beim Fehlschlagen einer Installation die Option erhält, es erneut zu versuchen, was ich ausführen möchte, indem ich die Seite aktualisiere, auf der die Installation stattfindet (die Seite, auf der sich der Benutzer gerade befindet). Jede Hilfe wäre willkommen.

Dies ist eine Node-App, die auf Elektron läuft, keine Web-App.

Benutzeravatar von sambalicious
sambelhaft

Fügen Sie zunächst den React-Router als Abhängigkeit hinzu

`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)

Dadurch wird Ihre Seite automatisch neu gerendert

Verwenden Sie für den React-Router V6 stattdessen den useNavigate-Hook

import { useNavigate } from 'react-router'

const navigation = useNavigate()

navigieren(0)

  • Dies funktioniert, wenn ein Cookie in einem onClick-Ereignis gelöscht wird, mit dem Sie Ihren Authentifizierungsstatus handhaben history.go() Ich werde wie beabsichtigt abgemeldet und zum Anmeldebildschirm geschoben. Hat mit den anderen Antworten nicht wie beabsichtigt für mich funktioniert.

    – Lucas Reppe Welander

    8. Juni 2020 um 9:10 Uhr

  • Nicht wirklich SPA-Ansatz. Ich denke, diese Empfehlung ist zu kritisieren

    – Ott

    31. Oktober 2021 um 18:43 Uhr

  • Ich baue eine Web-App mit React und Express.js, und dieser Vorschlag hat für mich wie ein Zauber gewirkt. Beifall

    – Giovanni Pizzato

    17. November 2021 um 12:30 Uhr

  • Funktioniert nicht mit React-Router v6 (versucht navigate(0)).

    – Andrej

    29. Juli 2022 um 8:26 Uhr

Wenn Sie React-Router v6 verwenden

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

const navigate = useNavigate();

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

Benutzeravatar von Sumit Kumar
Sumit Kumar

Sie können dies verwenden, um die aktuelle Route zu aktualisieren:

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

  • dies verursacht ein Neuladen der gesamten Seite

    – Aleksej L.

    20. November 2019 um 14:21 Uhr

  • Etwas Ähnliches, wenn Sie Hooks verwenden – dies funktioniert für useHistory von React-Router-Dom. Aber ja, komplett Seite neu laden

    – Julian

    5. August 2021 um 20:01 Uhr

Brauchst du nicht wirklich react-router dafür. Sie können einfach verwenden location.reload:

location.reload();

Auch die Version von React-Router, mit der Sie verknüpft sind, ist sehr alt. Ich denke, sie verknüpft mit v1, wenn sie derzeit auf v4 ist.

Benutzeravatar von Darko Pranjic
Darko Pranjić

Ich vermute, dass Sie React-Router verwenden. Ich kopiere meine Antwort aus einem anderen Beitrag. Sie haben also nur wenige Möglichkeiten, dies zu tun. Derzeit verwende ich am liebsten die anonyme Funktion in der Komponenten-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>

Oder wenn Sie mit aktuellen URL-Parametern aktualisieren möchten, benötigen Sie eine zusätzliche Route (neu laden) und spielen ein wenig mit dem Router-Stack:

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>

  • Warum ist setTimeout hier erforderlich?

    – Dawson B

    29. August 2019 um 18:34 Uhr


  • @DawsonB Ich weiß es nicht, aber es funktioniert nicht ohne es … lol

    – Newoda

    30. September 2020 um 16:57 Uhr

Benutzeravatar von Ahmetsadri
Ahmetsadri

Reagieren

window.location.reload();

Arbeiten

  • Warum ist setTimeout hier erforderlich?

    – Dawson B

    29. August 2019 um 18:34 Uhr


  • @DawsonB Ich weiß es nicht, aber es funktioniert nicht ohne es … lol

    – Newoda

    30. September 2020 um 16:57 Uhr

Benutzeravatar von SaimumIslam27
SaimumIslam27

Wenn Sie die Daten erneut abrufen möchten, gehen Sie einfach wie folgt vor:

import { useLocation } from 'react-router'

const location = useLocation()

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

  • süße Lösung!

    – Lloyd Agola

    4. April 2022 um 12:57 Uhr

1438350cookie-checkWie lade ich eine Seite mit React-Router neu?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy