Скажите, что я имел следующий JSON файл:Использование React для вызова Nested API?
{
"farmer": [
{
"crops": "corn"
}
],
"activities":{
"hobbies": "swimming"
},
"name: Todd"
}
Я хотел бы знать, как совершать звонки на них с помощью React. Моя лучшая попытка, как показано ниже.
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}
будет работать, как это было написано. Однако я не уверен, как выразить последние два {this.state.activities.hobbies}
и {this.state.farmer[0].crops}
с использованием синтаксиса React.
Я написал их, надеюсь, способом, который выражает то, что я пытаюсь достичь с каждым звонком.
EDIT: Специфическая ошибка, которая возникает из последних двух, указывает, что они не определены.
EDIT: Итак, у меня есть второй, который добавляет пустое начальное состояние.
getInitialState: function(){
return {activities: '', farmer: ''}
}
Однако это оставляет последний, который все еще возвращает ошибку.
Все, что находится между '{...}', это обычный JavaScript (нет конкретного синтаксиса React). 'this.state.activities.hobbies' и т. д. будут работать до тех пор, пока данные существуют. Я предполагаю, что при первоначальном рендере данные не существуют. В этом случае вам сначала нужно подумать о том, как должен выглядеть пользовательский интерфейс, если данных нет. Тестирование на существование данных/свойств работает как обычно, например. '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' не имеет никаких свойств. Теперь я могу либо добавить начальное значение или тест перед протоколированием. –