开发者问题收集

TypeError:无法读取 REACT 项目中未定义的属性“map”?

2020-11-17
204

我正在开发一个 Codecademy 项目 Jammming,使用 Spotify API 创建播放列表生成器。我搜索了网上的所有内容、其他存储库和视频,但仍然不断收到映射错误。我不确定发生了什么?有什么想法吗?

发布在 github 上: https://github.com/carriepresley/jammming

import React from "react";
import "./TrackList.css";
import Track from "../Track/Track";




class TrackList extends React.Component {
    render(){
        return (
            <div className="TrackList">
            {this.props.tracks.map((track) =>{
                    return <Track 
                    key = {track.id}
                    track = {track}
                    />
                })
            }
            </div>
        )
    }
}
export default TrackList;
3个回答

这是一个非常常见的错误,您几乎肯定会再次遇到,但原因各不相同。它通常是由异步加载的数据引起的,这意味着一开始数据是空的(在您的例子中是 tracks ),后来它被一个数组填充,但也有其他原因,我将在后面解释。

有几种方法可以确保这不会破坏您的应用程序。

快速而肮脏的方法是在访问属性之前检查数据是否真实: data && data.map 。我只建议在没有更好的方法的情况下这样做,有时它可以隐藏错误而不是修复它。

我个人认为最好的做法是确保您的变量默认为空结构,代表数据 是什么样子。看起来您已经在 App.js 中执行了此操作,方法是将 searchResultsplaylistTracks 默认为状态数组。

我更喜欢这样做的原因是,现在如果您仍然收到错误,则知道问题不是异步问题,而是其他问题。例如忘记将 prop 传递到上级几级( App.js ):

<SearchResults searchResults = {this.state.searchResults}/>
//<Playlist/> 
<Playlist tracks={this.state.playlistTracks} /> // Pass it the prop it needs

Playlist 尝试从 this.props.tracksTrackList 提供 prop tracks ,但从未从 App.js 提供该 prop,因此它是未定义的。

<TrackList tracks = {this.props.tracks}/> // this.props.tracks is undefined from App

这就是您出现错误“无法读取未定义的属性 .map”的原因。只需检查 this.props.tracks 是否未定义即可停止错误,但会隐藏错误!

Brian Thompson
2020-11-17

尝试:

  <div className="TrackList">
        {this.props.tracks && this.props.tracks.map((track) =>{
                return <Track 
                key = {track.id}
                track = {track}
                />
            })
        }
        </div>
krimo
2020-11-17

针对问题解决方案:第 34 首曲目对跟随视频演示的人员产生错误 原因:第 32 首曲目在视频中重复了 2 次,因此第 33 首曲目在视频演示中缺失

解决方案:

在 App.js 中查找

<Playlist/>

更改

<Playlist searchResults={this.state.searchResults}/>

在 Playlist.js 中查找

<TrackList />

更改

<TrackList tracks={this.props.searchResults}/>
HTF Games Studio
2021-11-27