React TypeError: skill.map не является функцией - PullRequest
1 голос
/ 21 сентября 2019

У меня есть объект skills, и я хочу перебрать его и отобразить его содержимое.Объект выглядит следующим образом:

{
    "_id": {
            "$oid":"5d85b311e180652980824193"
    },
    "date":{
            "$date":{ "$numberLong":"1569043209148" }
    },
    "title": "test",
    "image":"test image",
    "description":"test desc",
    "__v":{ 
           "$numberInt":"0"
    }
}

Я использую MongoDB и мое отображение выглядит так:

    componentDidMount() {
        this.props.fetchSkills();
    }

    render() {

        const { skills } = this.props
        let skillData

        if (skills.length === 0) {

            return (
                <p>There are no skills to display</p>
            )

        } else {

            skillData = skills.map(skill => (

                <div key={skill._id}>       
                    <div>
                        <img src={skill.image} alt="" />
                    </div>

                    <div>
                        <h2>{skill.title}</h2>
                        <div>
                            <span>{skill.date}</span>
                        </div>
                        <div>
                            <p>{skill.description}</p>
                        </div>
                    </div>
                </div>

            ))
        }

        return (
            <div>

                {skillData}

            </div>
        )
    }

Однако при загрузке страницы появляется эта ошибка:

TypeError: skill.map не является функцией

  26 |            )
  27 |        } else {
  28 | 
> 29 |            skillData = skills.map(skill => (
  30 | ^               
  31 |                <div className="item" key={skill._id}>       
  32 |                

Я думаю, это потому, что .map может перебирать только массивы, но я пытаюсь перебрать объект.

1 Ответ

2 голосов
/ 21 сентября 2019

Вам нужно иметь array, чтобы иметь возможность перебирать его, используя функцию .map()

Так что просто преобразуйте ваш object в array of objects следующим образом:

[
    {
        "_id": {
                "$oid":"5d85b311e180652980824193"
        },
        "date":{
                "$date":{ "$numberLong":"1569043209148" }
        },
        "title": "test",
        "image":"test image",
        "description":"test desc",
        "__v":{ 
               "$numberInt":"0"
        }
    }
]

И теперь вы сможете успешно использовать .map()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...