Holen Sie sich Pfadparameter in React-Router v4

Lesezeit: 3 Minuten

Holen Sie sich Pfadparameter in React Router v4
Petter Östergren

Ich versuche, über meine Anwendung eine Router-Verbindung aufzubauen,

In diesem Szenario habe ich drei Dateien.

App.js

Book.js

DetailedView.js

Ich habe innerhalb von Buch eine aufgebaut <Link> das erscheint nur, wenn man mit der Maus darüber fährt (über einem Buchcover)

{this.state.isHovered ? (
   <Link to={`/details/${this.props.book.industryIdentifiers[1].identifier}`}>
<div className="hover-box"></div>
</Link>) : ( <div /> )}

Dies bringt mich zu /details/12345 (isbn10-Nummer)

Das, was ich zum Beispiel schwer verstehe, ist, wie man das macht
setState({iPressedThisBook}) beim Drücken <Link> oder ob ich das Teil danach verwenden kann /12345 wie ein Filter zu erstellen

Weil in App das Route wird angeschlossen als…

<Route path="/details/:id" render={() => (
          <BookDetailedView
            bookStateUpdated = {this.bookStateUpdated}
            book = {this.state.books}
          />
)}/>

Ich möchte später die greifen :id damit mache ich zum Beispiel a this.props.book.find(:id) in meinem <BookDetailedView>

1642573387 142 Holen Sie sich Pfadparameter in React Router v4
Shubham Khatri

Um den Pfadparameter in Ihrer Komponente zu erhalten, müssen Sie Ihre Komponente zuerst mit verbinden withRouter HOC aus react-router damit Sie auf die Router-Requisiten zugreifen und den Pfad erhalten können params von dem match Requisiten als this.props.match.params.id

Beispielcode:

import {withRouter} from 'react-router';

class BookDetailedView extends React.Component {
    render() {
        var id = this.props.match.params.id


    }
}
export default withRouter(BookDetailedView) ;

oder einfach mit render prop in route as weitergeben

<Route path="/details/:id" render={({match}) => (
          <BookDetailedView
            bookStateUpdated = {this.bookStateUpdated}
            book = {this.state.books}
            id={match.params.id}
          />
)}/>

Aus der React-Dokumentation von match

Spiel

Ein Übereinstimmungsobjekt enthält Informationen darüber, wie a <Route path> stimmte mit der URL überein. match Objekte enthalten die folgenden Eigenschaften:

  • params – (Objekt) Schlüssel/Wert-Paare, die von der URL analysiert werden, die den dynamischen Segmenten des Pfads entspricht
  • isExact – (boolean) true, wenn die gesamte URL abgeglichen wurde (keine nachgestellten Zeichen)
  • path – (string) Das für den Abgleich verwendete Pfadmuster. Nützlich zum Erstellen von verschachtelten s
  • url – (Zeichenfolge) Der übereinstimmende Teil der URL. Nützlich zum Erstellen von verschachtelten s

Sie haben an verschiedenen Stellen Zugriff auf Match-Objekte:

  1. Routenkomponente als this.props.match
  2. Route render as ({ match }) => ()
  3. Leiten Sie untergeordnete Elemente als ({ match }) => () weiter
  4. withRouter als this.props.match
  5. matchPath als Rückgabewert

Wenn eine Route keinen Pfad hat und daher immer übereinstimmt, erhalten Sie die nächste übergeordnete Übereinstimmung. Gleiches gilt für withRouter

  • Freut mich, dass ich es richtig erklären konnte 🙂

    – Shubham Khatri

    3. August 17 um 5:00 Uhr

  • this.props.computedMatch.params.id, ich habe es von computedMatch

    – Shan

    27. September 19 um 12:07 Uhr

  • Gibt es eine Möglichkeit, auf App-Ebene auf math.params zuzugreifen? matchPath() scheint der einzige Weg zu sein, denke ich, aber einige meiner Routen sind dynamisch und stimmen daher nicht mit einem Pfad überein.

    – Sibashm

    8. April 20 um 8:21 Uhr

  • @SibasishMohanty Bitte überprüfen Sie diesen Beitrag: stackoverflow.com/questions/52684017/…

    – Shubham Khatri

    8. April 20 um 8:24 Uhr

  • @SibasishMohanty Dies ist möglicherweise nicht der beste Weg, um bestimmte Dinge zu handhaben, aber mit Route-Parametern gibt es keine andere Möglichkeit, als den Zustand in einen gemeinsamen Elternteil oder sogar einen Speicher (Flux oder Redux) zu heben, um auf die Werte in der gesamten App zuzugreifen

    – Shubham Khatri

    8. April 20 um 8:33 Uhr

Sie können auf :id zugreifen, indem Sie this.props.params.id ausführen

Sie können das Routing auf viele Arten handhaben, Sie müssen es nicht tun, Sie können es auch in einer Funktion handhaben.

function doSomethingWhenClicked(id)
{
      doSomething();
      this.props.history.push({
        pathname: '/example/'+id
      });   
      
 }

und binden Sie diese Funktion an ein onclick-Element

  • Dies scheint die Frage nicht im Geringsten zu beantworten. Abgewertet, weil irrelevante und unvollständige Antwort.

    – Marty McGee

    28. Januar 19 um 15:16 Uhr

.

544070cookie-checkHolen Sie sich Pfadparameter in React-Router v4

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

Privacy policy