14

そうです、おそらくここで明らかなことを見逃していますが、「Uncaught TypeError: undefined is not a function」が表示されます.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 データは正しくフォーマットされています。何が問題なのですか?

4

3 に答える 3

19

これはばかげた間違いでした。quotes.php は適切にフォーマットされた JSON データを返していなかったので、配列 .map() が呼び出されていませんでした。教訓は?彼らのコードが機能するということを他の人の言葉で受け入れないでください!

于 2014-04-17T20:19:20.717 に答える
6

.map()提供された結果で新しい配列を作成するメソッドです。

そのためのドキュメントは次のとおりです。

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

ここでできること.dataは、オブジェクトのプロパティを変更して配列を返すことです。.map()は配列型オブジェクトでのみ機能するためです。

于 2014-04-16T17:33:31.750 に答える