React のマップ関数の「未定義のプロパティを読み取れません」エラーを解決するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-10-20 06:28:29
オリジナル
725 人が閲覧しました

How to Resolve the

React のマップ関数の「未定義のプロパティを読み取れません」エラーを理解する

React の開発では、「TypeError」エラーがよく発生します。 : マップ関数の利用中に、unknown のプロパティ 'onPlayerScoreChange' を読み取れません。この問題は通常、map 関数のバインディング プロセスが正しくないために発生します。

Context

提供されたコードには、次のコンポーネントを含む階層コンポーネント構造があります。

  • 親: アプリ
  • 子: プレイヤー
  • 孫: Counter

「onPlayerScoreChange」メソッドは App コンポーネントで定義されていますユーザー入力に基づいてプレーヤーのスコアを更新することを目的としています。

問題

エラーは、「アプリ」コンポーネントのマップ関数内で発生します。 onScoreChange" プロパティは App コンポーネントの "onPlayerScoreChange" メソッドに割り当てられます:

{this.state.initialPlayers.map(function(player, index) {
    return(
        <Player 
        name={player.name} 
        score={player.score} 
        key={player.id} 
        index={index}
        onScoreChange={this.onPlayerScoreChange}
        />
    )
})}
ログイン後にコピー

ただし、マップ関数のコンテキストは React コンポーネントのコンテキストとは異なります。その結果、関数内の "this" が App コンポーネント以外のものを参照し、"this.onPlayerScoreChange" が未定義になります。

解決策

これを解決するにはこの問題では、map 関数を App コンポーネントのコンテキストにバインドする必要があります。これは、アロー (ラムダ) 関数またはバインド メソッドを使用して実現できます。

アロー関数の使用

{this.state.initialPlayers.map((player, index) => {
    return(
        <Player 
        name={player.name} 
        score={player.score} 
        key={player.id} 
        index={index}
        onScoreChange={this.onPlayerScoreChange}
        />
    )
})}
ログイン後にコピー

アロー関数は、「this」値を自動的にバインドします。

Bind メソッドの使用

{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)}
        />
    )
}.bind(this))}
ログイン後にコピー

bind メソッドは、マップ関数を App コンポーネントのコンテキストに明示的にバインドします。 .

以上がReact のマップ関数の「未定義のプロパティを読み取れません」エラーを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!