Wie können wir Parameter this.props.history.push('/page')
in React-Router v4 übergeben?
.then(response => {
var r = this;
if (response.status >= 200 && response.status < 300) {
r.props.history.push('/template');
});
reactjs
react-router
IshanGarg
quelle
quelle
Route
sollte Zugang habenthis.props.location
,this.props.history
usw. Ich glaube , Sie nicht verwenden müssenref
mehr mit v4. Versuchen Sie esthis.props.history.push('/template');
props
an die Komponente zu übergeben , die der Route entspricht? Ich denke, dieser GitHub-Thread spricht Ihr Anliegen an.Antworten:
Zunächst müssen Sie dies nicht tun,
var r = this;
da sich diesif statement
auf den Kontext des Rückrufs selbst bezieht, der sich, da Sie die Pfeilfunktion verwenden, auf den Kontext der React-Komponente bezieht.Laut den Dokumenten:
Während der Navigation können Sie Requisiten wie an das Verlaufsobjekt übergeben
oder ähnlich für die
Link
Komponente oder dieRedirect
Komponenteund dann können Sie in der Komponente, die mit
/template
route gerendert wird , auf die Requisiten zugreifen, die wie übergeben wurdenBeachten Sie auch, dass Sie die Komponente verbinden müssen, wenn Sie Verlaufs- oder Standortobjekte von Requisiten verwenden
withRouter
.Gemäß den Dokumenten:
quelle
this.props.history.push('/template',response.data)
nicht arbeiten. Glaubenpush(path, [state])
Sie nicht, dass es laut Docs of funktionieren sollte?Sie können verwenden,
this.props.history.push("/template", { ...response })
oderthis.props.history.push("/template", { response: response })
Anschließend können Sie von der
/template
Komponente aus auf die analysierten Daten zugreifen, indem Sie den folgenden Code verwenden:const state = this.props.location.state
Weitere Informationen zum React Session History Management
quelle
Für die früheren Versionen:
Und erhalten Sie die Daten in der zugehörigen Komponente wie folgt:
Für die neueren Versionen funktioniert der obige Weg gut, aber es gibt einen neuen Weg:
Und erhalten Sie die Daten in der zugehörigen Komponente wie folgt:
Hinweis : Der
state
Schlüsselname wurde in früheren Versionen verwendet. In neueren Versionen können Sie Ihren benutzerdefinierten Namen zum Übergeben von Daten verwenden. Die Verwendung desstate
Namens ist nicht unbedingt erforderlich.quelle
Erweiterung der Lösung (von Shubham Khatri vorgeschlagen) zur Verwendung mit React-Haken (ab 16.8):
Übergeben von Parametern mit Verlaufs-Push:
Zugriff auf den übergebenen Parameter mit useLocation von 'react-router-dom':
quelle
Wenn Sie URL-Parameter übergeben müssen
Es gibt eine großartige Erklärung des Beitrags von Tyler McGinnis auf seiner Website, Link zum Beitrag
Hier sind Codebeispiele:
auf der history.push-Komponente:
this.props.history.push(`/home:${this.state.userID}`)
Auf der Routerkomponente definieren Sie die Route:
<Route path='/home:myKey' component={Home} />
auf der Home-Komponente:
quelle
Es ist nicht erforderlich, withRouter zu verwenden. Das funktioniert bei mir:
Auf Ihrer übergeordneten Seite
Dann können Sie in ComponentA oder ComponentB darauf zugreifen
Objekt, einschließlich der Methode this.props.history.push.
quelle
withRouter
weil Sie Ihre Komponente damit umwickelt habenBrowserRouter
, was genauso funktioniert.props
Down in jede Komponente weiter, die diehistory
Requisite enthält.Um React 16.8+ (withHooks) zu verwenden , können Sie diesen Weg verwenden
Quelle hier, um mehr zu lesen https://reacttraining.com/react-router/web/example/auth-workflow
quelle
Fügen Sie Informationen hinzu, um Abfrageparameter abzurufen.
Weitere Informationen zu URLSearchParams finden Sie unter diesem Link URLSearchParams
quelle