Подтвердить что ты не робот

.map() undefined не является функцией в React.js

Правильно, я, вероятно, пропустил очевидное здесь, но я получаю "Uncaught TypeError: undefined не является функцией" Кажется, что .map(), что проблема, но я не понимаю почему.

var idealist = React.createClass({
loadCommentsFromServer: function() {
    $.ajax({
        url: this.props.url,
        dataType: 'json',
        success: function(data) {
            this.setState({data: data});
        }.bind(this)
    });
},
handleButtonClick: function(input) {
    // do stuff //
},
getInitialState: function() {
    return {data: []};
},
componentWillMount: function() {
    this.loadCommentsFromServer();
    setInterval(this.loadCommentsFromServer, this.props.pollInterval);
},
render: function() {
    var clickFunction = this.handleButtonClick;
    var ideas = this.state.data.map(function(i){
        return <ideabox data={i} onButtonClick={clickFunction} />;
    });
    return (
        <div className="idealist">
            {ideas}
        </div>
        );
}
});

React.renderComponent(
<idealist  url="/json/quotes.php"  pollInterval={2000}/>,
document.getElementById('quoteList')
);

Если я изменю его на   var ideas = this.state.data Я не получаю никаких ошибок, данные JSON отформатированы правильно, что может быть неправильным?

4b9b3361

Ответ 1

Это была глупая ошибка, quotes.php не возвращал правильно отформатированные данные JSON, поэтому он не вызывал массив .map(). Урок узнал? Не заставляйте других людей говорить, что их код работает!

Ответ 2

.map() - это метод, который создает новый массив с предоставленными результатами.

Вот документация для этого:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

То, что вы можете здесь сделать, это изменить свойство .data объекта для возврата массива. Поскольку .map() будет работать только с объектами типа Array.