开发者问题收集

反应组件内的对象数组放置

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