Warum muss ich in React eine onClick-Funktion binden, anstatt sie aufzurufen?

8

In dieses Tutorial verwendet er eine onClick-Funktion mit bind.

%Vor%

Wenn ich die Bindung wie folgt entferne

%Vor%

Ich bekomme einen Fehler

  

Uncaught Error: Invariant Violation: setState (...): Kann nicht aktualisiert werden   während eines bestehenden Zustandsübergangs (z. B. in render ). Machen   Methoden sollten eine reine Funktion von Requisiten und Zustand sein.

Ich weiß, was bind macht, aber warum wird es hier gebraucht? Setzt das onClick die Funktion nicht direkt?

(Code ist in diesem JSbin: Ссылка )

    
ilyo 07.04.2015, 15:31
quelle

1 Antwort

7

Er verwendet bind , damit die deletePerson -Methode das korrekte person -Argument erhält.

Da die Card -Komponente kein vollständiges Person -Objekt erhält, kann dieser erkennen, auf welche Karte der Person tatsächlich geklickt wurde.

In Ihrem Beispiel, wo Sie die Bindung entfernt haben onClick={that.deletePerson(person)} evaluiert tatsächlich die Funktion that.deletePerson(person) und setzt diese als onClick. Die deletePerson -Methode ändert den Zustand der Komponente, was die Fehlermeldung sagt. (Sie können den Status während eines Rendervorgangs nicht ändern).

Eine bessere Lösung könnte darin bestehen, die ID in Card zu übergeben und sie bei einem Löschklick an die App-Komponente zurückzugeben.

%Vor%     
Crob 07.04.2015, 15:58
quelle

Tags und Links