#javascript #reactjs #error-handling #fetch
#javascript #reactjs #обработка ошибок #выборка
Вопрос:
Я изучаю, как использовать выборку, и пробовал следующий синтаксис:
const [stuff, setStuff] = useState([]);
const request = "link-to-API";
const data = await fetch(request)
.then(response => response.json())
.catch(err => {
console.log(err);
return {} //(or [], or an empty return, or any return at all)
})
setStuff(data.hits)
Затем, в возврате, у меня есть:
{stuff.map((element) => (
<Thing
title={element.label}
link={element.url}
/>
))}
Думая, что я мог бы просто отображать пустой объект всякий раз, когда моя выборка завершается неудачно. За исключением того, что это работает только тогда, когда работает сама выборка. Реакция выдает мне ошибку
«Объекты недопустимы как дочерние элементы React (найдено: ошибка типа: не удалось выполнить выборку)».
Но я не могу найти никакого решения в Интернете. Как я мог обрабатывать ошибки, просто ничего не отображая? (это не единственная часть, которую я рендерю, я просто хочу отобразить пустой div, а не условно отображать эту часть)
Ответ №1:
при использовании await
вы не можете использовать then
catch
методы и
Важно, чтобы вы использовали await
async
функцию in
let data = null
try{
const response = await fetch(request)
data = response.json();
} catch(err) {
console.log(err);
}
Комментарии:
1. поскольку это функциональный компонент, у вас не может быть случайного оператора retrun, который ничего не возвращает. возврат приведет к «Ошибка: приложение (…): из рендеринга ничего не было возвращено. Обычно это означает, что оператор return отсутствует. Или, чтобы ничего не отображать, верните null. »
Ответ №2:
вы можете попробовать удалить ключевое слово await, которое вы используете.тогда также часть выборки данных должна быть включена в useEffect
const [stuff, setStuff] = useState([]);
const request = "link-to-API";
useEffect( ()=> {
fetch(request)
.then(response => response.json())
.then(data => setStuff(data.hits))
.catch(err => {console.log(err)})
},[])
Комментарии:
1. Отсутствие возврата чего-либо вызывает ту же проблему, я отредактирую вопрос