AbortController
Примечание: Когда вызывается abort()
, обещание fetch()
отклоняется с DOMException
с именем AbortError
.
Когда компонент отключается и abort
вызывается, fetch
отклоняется с ошибкой. Ошибка обнаружена, и этот код пытается установить состояние с ошибкой. Пропуск этого обновления состояния ошибки удаляет ошибку реакции.
useEffect(() => {
const controller = new AbortController();
const signal = controller.signal;
fetch(`https://pokeapi.co/api/v2/pokemon/${name}`, { signal })
.then(sleeper(1)) // Create some latency
.then(res => res.json())
.then(response => {
setData(response);
})
.catch(error => {
setData(error); // <-- this is being called after component unmounts!
});
return () => {
controller.abort();
};
}, [name]);
Я также готов поспорить, что ошибка возникает каждый раз, но реакция просто выводит первый и выводит глушение для последующие ошибки.