나는 다음과 같은 JSON 파일을 가지고 말 :React를 사용하여 중첩 된 API를 호출 하시겠습니까?
I 반응 사용하여 전화를 걸하는 방법을 알고 싶습니다{
"farmer": [
{
"crops": "corn"
}
],
"activities":{
"hobbies": "swimming"
},
"name: Todd"
}
. 최선의 시도는 아래와 같습니다.
componentDidMount: function(){
var selfish = this;
$.get('~~someurl~~', function(data){
selfish.setState(data);
});
},
render: function(){
return (<div>
<p>{this.state.name}</p>
<p>{this.state.activities.hobbies}</p>
<p>{this.state.farmer[0].crops}</p>
</div>)
}
나는 처음으로 {this.state.name}
이 작성된대로 실행됩니다. 그러나 React 구문을 사용하여 마지막 두 {this.state.activities.hobbies}
과 {this.state.farmer[0].crops}
을 표현하는 방법에 대해서는 확실치 않습니다.
저는 전화를 걸 때마다 성취하고자하는 바를 표현한 방법으로 작성했습니다.
EDIT : 후자의 두 가지 결과로 나타나는 특정 오류는 정의되지 않았습니다.
EDIT : 그래서 빈 초기 상태를 추가하여 두 번째 작업을 얻었습니다.
getInitialState: function(){
return {activities: '', farmer: ''}
}
그러나 마지막으로 오류가 반환됩니다.
'{...}'사이의 모든 것은 JavaScript (특정 "React syntax"는 없습니다)입니다. 'this.state.activities.hobbies' 등은 데이터가 존재하는 한 작동 할 것입니다. 초기 렌더링에서 데이터가 존재하지 않는다고 가정합니다. 이 경우 데이터가없는 경우 UI의 모양을 먼저 생각해야합니다. 데이터/속성의 존재에 대한 테스트는 평소처럼 작동합니다 (예 : 'this.state.activities && this.state.activities.hobbies'. 그것에 대해 구체적인 반응은 없습니다. –
그러면 내가 가지고있는 질문은'{this.state.name} '처럼 페이지로드 중에 이러한 호출을로드하는 방법입니다. 왜냐하면'{this.state.name} '은 내가 렌더링하자마자 바로 로딩되기 때문입니다. –
초기 렌더링시 * 실행됩니다. 그러나'this.state.activities'가 처음으로 존재하지 않기 때문에 오류가 발생합니다.따라서 값이 존재하는지 여부를 미리 확인하거나 해당 검사에 따라 무언가를 렌더링해야합니다. 그렇지 않으면 구성 요소에 기본 상태를 제공해야합니다. 비어있는'this.state.activities' 객체를 사용합니다. 다음은 겪고있는 문제의 간단한 예입니다 :'var state = {}; console.log (state.activities.hobbies);''state'에는 어떤 속성도 없기 때문에 에러가 발생합니다. 이제 로깅하기 전에 초기 값이나 테스트를 추가 할 수 있습니다. –