#javascript #reactjs
#javascript #reactjs
Вопрос:
Я пытаюсь выполнить вызов API, затем увлажнить страницу данными, которые я получаю, однако я не могу понять, как условно отобразить то, что находится на странице. Как только страница загружается, я получаю сообщение об ошибке «TypeError: не удается прочитать свойство ‘humidity’ неопределенного типа». Я хочу иметь возможность отображать одно и то же представление с пустыми пробелами до тех пор, пока пользователь не начнет взаимодействовать со страницей.
Вот мой код
const handleInputChange = (e) => {
setSearch(e.target.value)
};
const handleCall = () => {
API.getWeather(search)
.then(res => {
setWeather(res.data)
})
};
return (
<h2> Feels Like: {weather.main.temp}</h2>
<ul>
<li>Humidity: {weather.main.humidity}</li>
<li>Max Temp: {weather.main.temp_max}</li>
</ul>
)
Комментарии:
1. Для чего задано начальное значение состояния
weather
? Можете ли вы обновить, чтобы включить полный код компонента? Вероятно, вам потребуется использовать условный рендеринг или какую-либо другую форму защиты от ошибок «доступ к неопределенному», таких как проверки доступа или необязательное объединение в цепочку.2. Извините, я должен был это добавить. Начальное состояние для weather — это просто пустой массив. Я не смог разобраться с условным отображением, поэтому я попытался использовать useEffect (), чтобы предоставить ему данные из первой загрузки, но это не сработало
Ответ №1:
Использование защитного шаблона
return (
<h2> Feels Like: {weather amp;amp; weather.main amp;amp; weather.main.temp}</h2>
<ul>
<li>Humidity: {weather amp;amp; weather.main amp;amp; weather.main.humidity}</li>
<li>Max Temp: {weather amp;amp; weather.main amp;amp; weather.main.temp_max}</li>
</ul>
)
Использование необязательной цепочки
return (
<h2> Feels Like: {weather?.main?.temp}</h2>
<ul>
<li>Humidity: {weather?.main?.humidity}</li>
<li>Max Temp: {weather?.main?.temp_max}</li>
</ul>
)
Ответ №2:
Вы можете сделать что-то вроде
weather amp;amp; weather.main amp;amp; weather.main.temp || "Loading..."
Таким образом, пока у вас в системе не появятся данные, будет отображаться слово «Загрузка …»