2014-04-16 2 views
13

맞습니다. 여기에 명백한 내용이 누락되어 있지만 'Uncaught TypeError : undefined is not function'이됩니다. '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)은 자바 스크립트 배열의 함수입니다. 그것은 React에 의해 정의되지 않았습니다. 'this.state.data'가 배열인지 확인하십시오. –

+0

그게 전부 왜 내가 혼란스러워, 상태, 내가 아는 한 배열 및 state.data가 getInitialState에 정의되어 있어야합니다 : function() { return {data : []}; }. state.data는 loadCommentsFromServer에 의해 업데이트됩니다. 문제의 스크립트가 올바른 형식의 JSON 데이터를 반환합니다. – t1m0thy

답변

15

quotes.php가 제대로 포맷 된 JSON 데이터를 반환하지 않아서 .map() 배열이 호출되지 않아서 바보 같은 실수였습니다. 수업은 배웠습니까? 다른 사람들이 자신의 코드가 작동한다는 말을하지 마십시오!

5

.map()은 제공되는 결과로 새 Array를 만드는 방법입니다.

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

당신이 할 수있는 배열을 반환하는 개체의 .data 속성을 변경하는 것입니다 것은 다음과 같습니다

은에 대한 설명서입니다. .map()은 Array 유형 객체에서만 작동합니다.

+0

사실 map은 object와 같은 배열에서 작동하지만 '.call' 또는'.apply' 또는 duck을 통해 명시 적으로'this '값을 설정해야합니다. –