2014-04-16 334 views
13

對,我可能在這裏很明顯缺少這個,但我得到一個'Uncaught TypeError:undefined不是函數'我似乎是.map()這是這個問題,但我不明白爲什麼。.map()undefined不是函數React.js

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想法= this.state.data 我沒有得到任何錯誤,JSON數據格式正確,還有什麼能錯了嗎?

+0

你確定this.state.data是一個數組嗎? – Hatsjoem

+0

['map'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map)是JavaScript的Array上的一個函數;它沒有被React定義。確保'this.state.data'是一個數組。 –

+0

這就是爲什麼我很困惑,狀態,據我所知必須是一個數組和state.data定義在getInitialState中:function(){ return {data:[]}; }。 state.data由loadCommentsFromServer更新。有問題的腳本返回格式正確的JSON數據 – t1m0thy

回答

15

這是一個愚蠢的錯誤,quotes.php沒有返回格式正確的JSON數據,所以它不是一個數組.map()被調用。學到的教訓是?不要把別人的話說成是他們的代碼工作!

5

.map()是一種用提供的結果創建新數組的方法。

下面是該文檔:

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

,你可以在這裏做的是改變對象的.data屬性返回數組中的事情。由於.map()僅適用於數組類型對象。

+0

實際上,'map'可以用於任何像對象一樣的數組,但是你需要通過'.call'或'.apply'或者duck類型來明確地設置'this'的值。 –