Heim > Web-Frontend > js-Tutorial > Hauptteil

Wie bindet man Funktionen in React Map Iterationen richtig?

Patricia Arquette
Freigeben: 2024-10-20 06:30:02
Original
396 Leute haben es durchsucht

How to Bind Functions Correctly in React Map Iterations?

Bindungsfunktionen in React-Map-Iterationen

Problemstellung

Bei der Verwendung der Map-Funktion in React kann bei Entwicklern der Fehler „TypeError: Cannot“ auftreten Eigenschaft von undefiniert lesen.“ Dieser Fehler tritt auf, wenn eine bestimmte Methode, z. B. onPlayerScoreChange, innerhalb der Map-Funktion aufgerufen wird, aber nicht korrekt gebunden wurde.

Komponentenhierarchie verstehen

In der angegebenen React-Anwendung wird die Datenfluss und Komponentenhierarchie sind wie folgt strukturiert:

  • Großelternkomponente:App interagiert mit der Enkelkomponente und verarbeitet die onPlayerScoreChange-Methode.
  • Untergeordnete Komponente Komponente: Der Player empfängt Daten von der Großelternkomponente und gibt sie an die Enkelkomponente weiter.
  • Enkelkindkomponente: Der Zähler verarbeitet Benutzereingaben und interagiert mit der Methode onPlayerScoreChange in der Großelternkomponente.

Bindungsfunktionen für Kartenfunktionen

Der Fehler tritt auf, weil die onPlayerScoreChange-Methode innerhalb der Kartenfunktion in der übergeordneten Komponente nicht korrekt gebunden ist. Die Bindung ist bei der Verwendung von Funktionen innerhalb von Karteniterationen von entscheidender Bedeutung, da sich der Kontext der Kartenfunktion vom Kontext der React-Komponente unterscheidet. Folglich verweist dies innerhalb der Map-Funktion nicht auf die React-Komponente, was zu Zugriffsproblemen auf deren Eigenschaften führt.

Es gibt zwei gängige Möglichkeiten, dieses Problem zu lösen:

Verwendung von Pfeilfunktionen

Pfeilfunktionen binden implizit den Kontext der Komponente. In diesem Fall würde der folgende Code den Fehler beheben:

<code class="javascript">{this.state.initialPlayers.map((player, index) => {
                return(
                    <Player 
                    name = {player.name} 
                    score = {player.score} 
                    key = {player.id} 
                    index = {index}
                    onScoreChange = {this.onPlayerScoreChange}
                    />
                )
            })}</code>
Nach dem Login kopieren

Funktionsbindung explizit verwenden

Ein anderer Ansatz besteht darin, die Funktion explizit mithilfe der Bindungsmethode zu binden. Dies kann erreicht werden, indem der this-Kontext der Komponente als Argument an die Bindungsmethode übergeben wird:

<code class="javascript">{this.state.initialPlayers.map(function(player, index) {
                return(
                    <Player 
                    name = {player.name} 
                    score = {player.score} 
                    key = {player.id} 
                    index = {index}
                    onScoreChange = {this.onPlayerScoreChange.bind(this)}
                    />
                )
            })}</code>
Nach dem Login kopieren

Durch die Verwendung einer dieser Methoden zum Binden der onPlayerScoreChange-Methode innerhalb der Karteniteration sollte der Fehler behoben werden .

Das obige ist der detaillierte Inhalt vonWie bindet man Funktionen in React Map Iterationen richtig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!