代码之家  ›  专栏  ›  技术社区  ›  SkyeBoniwell

检查数组时无法读取空的属性“length”

  •  0
  • SkyeBoniwell  · 技术社区  · 6 年前

    我想在网站上展示一些照片。每次我尝试时,都会出现以下错误:

    无法读取空的属性“length”

    import React, { Component } from 'react';
    import axios from 'axios';
    
    
    class ImagePlayer extends Component {
    constructor(props) {
        super(props);
        this.state = {
            photos: null
        };
    }
    
    componentDidMount() {
        axios.get(`/api/gameDev/image-files/${this.props.charId}/pics`)
            .then((response) => {
                this.setState({ photos: response.data })
            })
            .catch((error) => {
                console.log(error);
            });
    
    }
    
    showMedia = (props) => {
        return (
            <div>
                {
                    props.photos.length > 0 &&
                        <div>
                            {props.photos.map((photo) => photo.title)}
                        </div>
                }
            </div>
        );
    }
    
    render() {
        return (
            <div>
                <div>Show Media</div>
                <div>
                    {this.showMedia(this.state)}
                </div>
            </div>
        );
    }
    

    }

    导出默认图像播放器;

    我知道我做错了什么。如果有人能看到任何东西,请告诉我。

    谢谢!:)

    2 回复  |  直到 6 年前
        1
  •  2
  •   Roy Wang    6 年前

    设置初始值 photos 空数组的状态:

    this.state = {
        photos: []
    };
    

    或者,更改 props.photos.length > 0 到:

    props.photos && props.photos.length > 0 // or (props.photos || []).length > 0
    
        2
  •  1
  •   Rodius    6 年前

    第一次装入渲染时,状态的照片为空。您需要将其设置为初始空数组,以便此阶段不会失败:

    this.state = {
      photos: []
    };