2016-11-18 7 views
0

나는 GET 요청을 만드는 중이라서에서 사용하는 팀 데이터를 반환 응용 프로그램을 반응한다. 부모 구성 요소에서 이것을 만든 다음 하위 구성 요소 Loop 구성 요소로 전달합니다. GET 요청이 작동하지만 GET 요청이 완료되지 않았기 때문에 render 기능에 도달하면 정의되지 않았습니다. componentWillMount을 사용해 보았지만 같은 문제가 발생했습니다. 사용하여 데이터에 반응 내에서 하위 구성 요소

내가 잘못하고 있어요 뭔가를 분명 볼 수 밖에 사람이 있습니까? 나는 React에 아주 새로운 사람이다.

아래 코드를 참조하십시오.

var App = React.createClass({ 

    getInitialState: function() { 
     return { 
      teams: [] 
     } 
    }, 

    componentDidMount: function() { 
     $.get(url, function(data) { 
      this.state.teams.push(data) 
     }); 
    }, 

    render: function() { 
     console.log(this.state.teams) 
      return ( 
      <div> 
       < Loop teams={this.state.teams}/> 
      < /div> 
     ) 
    } 
}); 

var Loop = React.createClass({ 
    render: function() { 
     var teamList = this.props.teams.map(function(team, index){ 
      return(
       <h1 key={index}> 
        {team.name} 
       </h1 > 
      ) 
     }) return <ul > {teamList} < /ul> 
    } 
}) 
+1

당신은 바로 당신이로'this.state' 개체를 변경할 수 없습니다, ** https://facebook.github.io/react/docs/state-and-lifecycle.html#do-not ([여기 참조] -modify-state-directly) **. 귀하의 경우에는 this.setState ({teams : data})이어야합니다. –

답변

2

당신이 올바른 궤도에있어 : ​​이유는 요청이 아직 완료되지 않았기 때문에 undefined가 얻을 이유. 코드가 직접 상태를 변경 this.state을 사용하기 때문이다

.

componentDidMount: function() { 
    $.get(url, function(data) { 
     this.setState({ 
     teams: data, 
     }) 
    }.bind(this)); 
} 

the docs를 참조하십시오 업데이트 요청이 수행 된 경우에만 상태 setState를 사용해야하므로 그러나 귀하의 요청은 비동기입니다.

+0

고마워요! 알았다! –

+0

콜백에 'this'를 바인딩해야하기 때문에 감사합니다. '.bind (this)'는 get 요청에 전달할 콜백의 끝에서 작동합니다. 가능한 경우 화살표 함수'data =>' –

+0

을 사용하십시오. 즉, 'this'의 범위가 변경되었음을 의미합니다. 따라서 새로운 컨텍스트에 바인딩해야합니다. 나는 편집을했다. 또 다른 방법은 [ES6 화살표 기능] (http://stackoverflow.com/a/35020509/2794702)입니다. –

관련 문제