В данном случае мне приходит в голову, что вы получаете ответ после выполнения метода render
.
Вы можете спросить Но как это работает, когда я регистрирую только this.state.data.product
?
Что ж, когда вы инициализируете свое состояние, вы определяете, что у него есть объект data
, поэтомув этом случае код не будет нарушен, потому что this.state.data.product
равен undefined
, но когда вы пытаетесь получить еще один слой глубже, вы пытаетесь получить доступ к свойству со значением undefined
, что приводит к ошибкеполучение (не может прочитать свойство x из неопределенного).
Итак, что я могу сделать, чтобы это исправить?
Вы должны хранить логическую переменную в своем состоянии, давайтеназовите его fetchingData
и присвойте ему значение по умолчанию true
, так что теперь у вас есть
state = {
data: {},
fetchingData: true
};
, а затем в вашем методе render
вы проверяете, извлекает ли он данные или ужеответ от сервера, измените его так, чтобы он был таким:
render() {
if(this.state.fetchingData) return <View><Text>Fetching data...</Text></View>
console.log(this.state.data.product.brands);
return(
Whatever you want to do with the data...
)
}
Что происходит, когда вы все еще ждете данных, будет отображаться сообщение Fetching data...
, теперь, когда вы получите данные, которые вытакже необходимо изменить fetchingData
на false.
if (response.status == 200) {
let data = await response.json();
this.setState({
data: data,
fetchingData: false
});
}