.map()undefined不是React.js中的函数

t1m*_*thy 14 javascript reactjs react-jsx

是的,我可能在这里错过了明显的但是我得到了一个'未捕获的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')
);
Run Code Online (Sandbox Code Playgroud)

如果我将其更改为var ideas = this.state.data我没有收到任何错误,JSON数据格式正确,可能出错?

t1m*_*thy 18

这是一个愚蠢的错误,quotes.php没有返回格式正确的JSON数据,所以它不是一个数组.map()被调用.吸取了教训?不要让其他人说出他们的代码有效!


Afz*_*han 5

.map() 是一种创建具有提供结果的新数组的方法.

这是以下文档:

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

你可以在这里做的事情是改变.data对象的属性以返回一个数组.因为.map()它只适用于Array类型对象.