在React 中使用map 函數時,開發者可能會遇到錯誤, 「TypeError: Cannot讀取未定義的屬性。」當在地圖函數中呼叫特定方法(例如onPlayerScoreChange)但尚未正確綁定時,會發生此錯誤。
在給定的React 應用程式中,資料流和組件層次結構如下:
出現此錯誤是因為祖父組件中的地圖函數中的 onPlayerScoreChange 方法未正確綁定。在映射迭代中使用函數時,綁定至關重要,因為映射函數的上下文與 React 元件上下文不同。因此,map 函數中的 this 並未引用 React 元件,從而導致對其屬性的存取問題。
有兩種常見方法可以解決此問題:
箭頭函數隱式綁定組件的上下文。在這種情況下,以下程式碼將解決該錯誤:
<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>
另一種方法是使用 bind 方法明確綁定函數。這可以透過將組件的 this 上下文作為參數傳遞給綁定方法來實現:
<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>
透過使用這些方法之一在地圖迭代中綁定 onPlayerScoreChange 方法,應該解決錯誤.
以上是如何在 React Map 迭代中正確綁定函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!