Я пытаюсь отобразить массив как набор элементов <li>
. Я использую React с синтаксисом ES2015 и Babel для перевода.Array.prototype.map возвращает undefined
Массив хранится в объекте и могут быть доступны как this.props.technologies
, поэтому, когда я пишу это:
<ul className="categories">
{ this.props.technologies }
</ul>
Я получаю следующий HTML вывод:
<ul class="categories" is="null">
coffeescript
atom
</ul>
Но, когда я пытаюсь это:
<ul className="categories">
{
this.props.technologies.map(c => {
return `<li>${c}</li>`
})
}
Я получаю сообщение об ошибке сказав: this.props.technologies is undefined
Я даже пытался это сделать:
this.props.technologies.map(c => c)
просто проверить, если карта работает, но он по-прежнему приводит к одной и той же ошибки.
Редактировать
Я попытался тестирования, и обнаружили, что это происходит только тогда, когда я получать данные с помощью AJAX.
Edit 2 Я обеспечивая MVCE
import React, {Component} from 'react'
import axios from 'axios'
class Header extends Component {
constructor(props) {
super(props)
this.state = {}
}
render() {
return(
<ul>
{
this.props.technologies.map(c => <li>{c}</li>)
}
</ul>
)
}
}
class Details extends Component {
constructor(props) {
super(props)
this.state={}
}
componentWillMount(){
axios.get(`/static/dummydata/test.json`)
.then(res => this.setState(res.data))
.catch(res=>console.log(res))
}
render(){
return(
<Header technologies={this.state.technologies}/>
)
}
}
export {Header, Details}
Данные в test.json является:
{
"technologies": [
"coffeescript",
"js"
]
}
Вы можете рассказать об общем количестве коусов, записанных в –
, может быть, что 'this.props.technologies' не является массивом в вашем примере. – anvk
Возможно, проверьте, действительно ли технологии - это массив или массивный объект. Вы можете сделать это, например, с помощью 'Array.isArray (this.props.technologies)'. –