So übergeben Sie Daten von einer Seite an eine andere Seite mit React Router
Lesezeit: 4 Minuten
Shadow_net
Bitte, ich brauche Hilfe bei React-Router-Dom, ich bin neu in der Bibliothek und kann seitdem anscheinend jede Lösung finden. Ich erhalte drei Ergebnisse von einem API-Aufruf, in dem ich die Daten abbilde, um sie auf der Benutzeroberfläche zu rendern. Jetzt brauche ich Folgendes: Wenn ich auf eine Zeile in einer dieser Listen klicke, möchte ich, dass sie mich zu a führt Bildschirm, der nur die Details der einzelnen Sache zeigt, auf die ich geklickt habe.
Sie können den Zustand im Link-Element übergeben. google.com/…
– Senhil Balaji
12. Januar 2020 um 5:05 Uhr
Zeichnete Reese
Option 1: Routenstatus übergeben
Senden Sie den Status im Routenübergang.
Verwenden react-router-dom v5
Sie können einen Status übergeben, der für den zugeordneten Eintrag eindeutig ist, wie z info.id zusammen mit dem Routen-Push, der passiert, wenn auf den Link geklickt wird. Dadurch werden die Daten des Benutzers verschleiert, da Sie keine Informationen an die Benutzeroberfläche (dh den Browser) weitergeben.
Sie können dann den Zustand aus dem entpacken location prop/object auf der Komponente, die von dieser Route zurückgegeben wird. Verwenden Sie Wächter, falls ein Benutzer zu navigiert hat '/home/userDetails' von woanders, wie state kann undefiniert sein.
Und im Fall von Funktionskomponenten die useParams Haken reagieren:
const { infoId } = useParams();
Der Benutzer kann dies sehen, aber Sie müssen das Schutzmuster nicht verwenden, um darauf zuzugreifen, da es per Definition durch die Route definiert wird (obwohl infoID kann immer noch definiert werden, wenn der Benutzer eine ungültige ID eingibt).
Ich scheine die erste Option nicht zu verstehen, können Sie bitte einen Code zeigen, wie Sie diese Daten auf dieser zweiten Seite abrufen können. Ich habe es versucht und es gibt immer wieder “undefiniert” zurück, wenn ich meine Daten protokolliert habe.
– Shadow_net
12. Januar 2020 um 10:06 Uhr
Ich dachte ich hätte. Ich habe es aus dem kopiert/eingefügt react-router-dom docs und passte es näher an Ihren Code an, und ich habe einen Link zu diesem Abschnitt eingefügt. Ich habe meine Antwort aktualisiert, um einen Link zu einer laufenden Codesandbox aufzunehmen. Wenn beim Versuch, auf die location.state Ich habe erwähnt, das Schutzmuster zu verwenden, um sicherzustellen, dass der Objekteigenschaftenpfad mit dem von Ihnen benötigten Statuswert definiert ist.
– Zeichnete Reese
12. Januar 2020 um 10:44 Uhr
Sohail Ashraf
Sie können die Pfadparameteroption von verwenden react-router-dom .
Beispiel
import React from 'react'
import { BrowserRouter as Router, Route } from 'react-router-dom'
import Topic from '../topic'
export default function App() {
return (
<Router>
<div>
<Route path="/topic/:name" component={Topic} />
</div>
</Router>
);
}
Übergeben Sie die Parameter:
import React, { Component } from "react";
import { Link } from 'react-router-dom'
export default class Topics extends Component {
render() {
return <Link to="/topic/someTopicName">Some Topic</Link>;
}
}
Greifen Sie auf Router-Parameter in der Komponente zu
import React from 'react'
export default function Topic(props) {
return <h1>{props.match.params.name}</h1>
}
So können Sie Daten an die navigierte Komponente übergeben
Sie können den Zustand im Link-Element übergeben. google.com/…
– Senhil Balaji
12. Januar 2020 um 5:05 Uhr