Zugriff auf this.props in React ComponentDidMount

Lesezeit: 3 Minuten

Benutzer-Avatar
Nithin krishna

Ich bin neu im Reagieren und stecke bei einem bestimmten Projekt fest. Die Sache ist, dass ich eine habe api_url in this.props von einer übergeordneten Komponente empfangen. Und in dieser untergeordneten Komponente möchte ich verwenden api_url um einige Daten mit JSON abzurufen.

In der übergeordneten Komponente habe ich:

Repositories api_url={this.state.objs.repos_url}

und in der untergeordneten Komponente möchte ich so etwas wie:

componentDidMount() {    
    $.getJSON(this.props.api_url, function(json) {
        for (var i = 0; i < json.length; i++) {
            var each_repo = json[i]
            console.log(each_repo["name"]);
        }    
    });
}

also was ich brauche ist das entsprechende api_url im URL-Abschnitt von $.getJSON.

Gibt es eine Zugriffsmöglichkeit this.props in componentDidMount oder gibt es eine andere Möglichkeit, die gleichen Ergebnisse zu erzielen?

Eine andere Sache in diesem Zusammenhang ist, dass ich auch a verwende $.getJSON rufen Sie an ComponentDidMount der übergeordneten Komponente.

Ein Dank im Voraus.

  • Ich bin mir nicht sicher, ob ich das ganz verstehe … this.props ist in der gesamten Klasse verfügbar. Dein Code ist also in Ordnung.

    – Seb Bizeul

    11. November 2016 um 8:35 Uhr

  • Kannst du schon, meinst du drinnen $.getJSON?..

    – Dominik

    11. November 2016 um 10:56 Uhr

  • Dein Code funktioniert – jsbin.com/wirodemulu/edit?html,js,console,output – wenn Sie zugreifen möchten this aus der Callback-Funktion in $.getJSON Sie müssen verwenden .bind().

    – Henrik Andersson

    11. November 2016 um 14:28 Uhr

  • Ich habe genau das gleiche Problem. Ich habe meine Methode im Konstruktor gebunden, kann aber immer noch nirgendwo auf Requisiten zugreifen, außer in der Methode render()

    – bernieslearning

    23. Februar 2019 um 23:24 Uhr

Implementieren Sie in Ihrer Klasse den Konstruktor:

constructor(props){
  super(props);
  this.state = {
     //states
  };
}

componentDidMount(){
  //Get this.props
  console.log(this.props.nameOfProp);
};

Wahrscheinlich ist es bei dieser Reaktionsversion einfacher, es zu bekommen.

  • Dies gibt mir einen Fehler, aber wenn ich this.props.nameOfProp innerhalb von render aufrufe, funktioniert es.

    – Daniel José Padilla Peña

    31. August 2017 um 15:23 Uhr

Um auf Requisiten in der untergeordneten Komponente zuzugreifen, müssen Sie einen Konstruktor in der untergeordneten Komponente erstellen und dann Requisiten als Attribut an die Funktion super() übergeben

constructor(props) {
   super(props);
   this.state = {}
}
componentDidMount(){

   $.getJSON(this.props.api_url , function(json) {
        for (var i = 0; i < json.length; i++) {
            var each_repo = json[i]
        console.log(each_repo["name"]);

      }

    });

  } 

Sobald Sie dies getan haben, können Sie auf Requisiten in Ihrer gesamten untergeordneten Komponente zugreifen

  • Ich habe dasselbe bereits versucht und es gibt undefiniert zurück, wenn ich this.props.api_url an der Konsole angemeldet habe

    – Nithin krishna

    11. November 2016 um 9:11 Uhr

  • Überprüfen Sie, ob der Wert this.state.objs.repos_url in der übergeordneten Komponente vorhanden ist

    – Shubham Khatri

    11. November 2016 um 9:43 Uhr

  • .bind(this) fehlt danach $.getJSONsiehe meine Antwort unten.

    – M3RS

    19. März 2018 um 15:02 Uhr

Sie haben wahrscheinlich ein Problem mit der this in Ihrem Ajax-Aufruf. Meine Vermutung wäre, dass Sie binden müssen this in Ihren Repositories, sodass die Instanz von this in Ihrem Ajax-Aufruf bezieht sich auf Repositories und nicht auf das Ajax-Objekt.

Benutzer-Avatar
M3RS

Für diejenigen, die jetzt über diese Seite stolpern, was oben fehlt, ist .bind(this) nach $.getJSON. Andernfalls können Sie nicht zugreifen this innerhalb $.getJSON.

componentDidMount() {
    $.getJSON(this.props.api_url, function(json) {
        for (var i = 0; i < json.length; i++) {
            var each_repo = json[i]
            console.log(each_repo["name"]);
        }

    }).bind(this);
}

Mein Problem ist ähnlich, aber auf diese Weise zu lösen

    let self = this
    this.props.users.map(function (u, x) {
        if (self.props.data[u.name]) {
            //Stuff
        }
    }

Meine if-Anweisung erkannte keine Requisiten, also verwendete ich stattdessen self

Benutzer-Avatar
Dan Andersson

Hast du versucht hinzuzufügen this.componentDidMount = this.componentDidMount.bind(this); zu deinem Konstrukteur? So erreichen Sie this aus componentDidMount.

1094170cookie-checkZugriff auf this.props in React ComponentDidMount

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

Privacy policy