反应组件内的对象数组放置
2020-02-08
153
我正在尝试使用 React 在网页上构建播放 mp3 的功能。我有一个对象数组,其中包含每首歌曲、专辑封面、艺术家和标题。
我试图弄清楚这在 React 类组件中的位置。
我想要做的是将 mp3 作为 props 传递给播放器组件,但我无法使用此行读取数组内的对象:
我收到的错误:TypeError:无法读取未定义的属性“0”
console.log(this.playlist[0].src);
下面是我的音乐组件的快照:
import React, { Component } from 'react';
import Player from '../Player';
import './Music.css';
class Music extends Component {
constructor(props) {
super(props);
this.state = {
IsPlaying: false,
currentImageShown: ''
}
let playlist = [
{
src: 'mymp3',
songPicture: 'someimage',
author: 'artistname',
title: 'songname'
},
{
src: 'mymp3',
songPicture: 'someimage',
author: 'artistname',
title: 'songname'
},
{
src: 'mymp3',
songPicture: 'someimage',
author: 'artistname',
title: 'songname'
}
];
}
handlePlayControlClick = (event) => {
event.preventDefault();
console.log('play button clicked');
// TypeError: Cannot read property '0' of undefined
console.log(this.playlist[0].src);
}
handlePauseControlClick = (event) => {
event.preventDefault();
console.log('pause button clicked');
}
handleForwardControlClick = (event) => {
event.preventDefault();
console.log('forward clicked');
}
handleBackwardControlClick = (event) => {
event.preventDefault();
console.log('backward clicked');
}
render() {
return (
<div>
<Player
onPlayClick={this.handlePlayControlClick}
onPauseClick={this.handlePauseControlClick}
onForwardControlClick={this.handleForwardControlClick}
onBackwardControlClick={this.handleBackwardControlClick}
/>
</div>
)
};
}
export default Music;
let playlist = [array of {objects}] 是否放在错误的位置?任何帮助都非常感谢。
2个回答
是的,
playlist
的位置不正确。它是构造函数中的局部变量,因此,在构造函数方法之外不可见。
如果它是静态列表,您可以将
playlist
设为类成员。
class Music extends Component {
playlist = [
{
src: 'mymp3',
songPicture: 'someimage',
author: 'artistname',
title: 'songname'
},
{
src: 'mymp3',
songPicture: 'someimage',
author: 'artistname',
title: 'songname'
},
{
src: 'mymp3',
songPicture: 'someimage',
author: 'artistname',
title: 'songname'
}
];
constructor(props) {
super(props);
this.state = {
IsPlaying: false,
currentImageShown: ''
};
}
}
Paul
2020-02-08
由于播放列表只是常量数据(仅读取组件),您可以将其保存在类声明之上。
const playlist = [{}, {}];
class Music extends Component {}
// console.log(playlist[0].src);
Siva Kondapi V
2020-02-08