开发者问题收集

如何解决 React Js 中的“无法读取未定义的属性‘map’”错误

2019-06-18
6569

我正在学习 React JS 教程,并尝试将 props 从一个组件传递到另一个组件,以便呈现曲目列表。我查看了一些有类似问题的线程,但没有任何建议可以解决我的问题,我不知所措。我怀疑这个问题与我的初始状态设置方式有关。

我尝试了以下操作。

无法读取未定义 REACT 的属性“map”

  • 按照上述建议,在接收组件时将“this.props”更改为“this.state”,反之亦然,但这并不能解决问题,只会返回“无法读取 null 的属性轨道”

这是我的 App.js,其中定义了初始状态并传递给搜索结果组件

  constructor(props) {
    super(props);

    this.state = {
      searchResults: [
        {
          name:'test', 
          artist:'test',
          album: 'test',
          id:'2'
        },
        {
          name:'test', 
          artist:'test',
          album: 'test',
          id:'2'
        }
      ]
    }
  }
  render() {
    return (

      <div>
      <h1>Ja<span className="highlight">mmm</span>ing</h1>
      <div className="App">
        <SearchBar/>
        <div className="App-playlist">
          <SearchResults searchResults={this.state.searchResults}/>
          <Playlist/>
        </div>
      </div>
    </div>



  );
  }
}
export default App;

这是 SearchResults 组件将 props 传递给 TrackList 的地方

class SearchResults extends React.Component { 
    render() {
        return(
            <div className="SearchResults">
            <h2>Results</h2>
                <TrackList tracks = {this.props.searchResults}/>
            </div>
        )
    }
}
export default SearchResults;

这似乎是发生错误的地方。

class TrackList extends React.Component {
  render() {
    return (
      <div className="TrackList">
        {this.state.tracks.map(track => <Track key={track.id} 
        track={track}  />)}
      </div>
    );
  }
}

export default TrackList;

最后,应该渲染的轨道类轨道

class Track extends React.Component { 
    render(){

        return( 
                        <div className="Track">
            <div className="Track-information">
                <h3>{this.props.track.name}</h3>
                <p> {this.props.track.artist} | {this.props.track.album}</p>
            </div>
            <button className="Track-action">- + or - will go here --></button>
            </div>
        )
    }
}

export default Track;

输出应为呈现的轨道列表,但我收到“TypeError:无法读取未定义的属性‘map’。

TypeError: Cannot read property 'map' of undefined TrackList.render src/components/TrackList/TrackList.js:11 8 | class TrackList extends React.Component { 9 | render() { 10 | return ( 11 | 12 | {this.props.tracks.map(track => )} 14 |

3个回答

从 PlayList render() 方法中注释掉 TrackList 组件 ,它应该可以正常工作。

我正在 codecademy 上学习同样的课程。您仍然收到错误的原因是因为在 PlayList.js 中有一个 TrackList 组件正在渲染但没有任何属性。因此在 TrackList 类中,没有要映射的属性。

Birshan Ramzy Caraccio
2020-05-21

应为:

{this.props.tracks.map(track => <Track key={track.id} track={track}  />)}

state 更改为 props

Umbro
2019-06-18

您实际上是在此处的 TrackList 组件中设置属性 tracks

<TrackList tracks = {this.props.searchResults}/>

tracks 此处不是状态,而是组件的属性(即 props )。
因此,您可能需要更改以下行:

{this.state.tracks.map(track => <Track key={track.id}

更改为:

{this.props.tracks.map(track => <Track key={track.id} 

这应该可以解决您的问题。

Adel Helal
2019-06-18