Ответ 1
Это была глупая ошибка, quotes.php не возвращал правильно отформатированные данные JSON, поэтому он не вызывал массив .map(). Урок узнал? Не заставляйте других людей говорить, что их код работает!
Правильно, я, вероятно, пропустил очевидное здесь, но я получаю "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 отформатированы правильно, что может быть неправильным?
Это была глупая ошибка, quotes.php не возвращал правильно отформатированные данные JSON, поэтому он не вызывал массив .map(). Урок узнал? Не заставляйте других людей говорить, что их код работает!
.map()
- это метод, который создает новый массив с предоставленными результатами.
Вот документация для этого:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
То, что вы можете здесь сделать, это изменить свойство .data
объекта для возврата массива. Поскольку .map()
будет работать только с объектами типа Array.