Написал хук для получения данных с сервера через Fetch, чтобы не писать каждый раз много строчек кода для запроса.
Код хукаexport const useFetch = () => {
const [loading, setLoading] = useState(false);
const [response, setResponse] = useState();
const [error, setError] = useState();
const request = async (url, method = 'GET', body = null) => {
setLoading(true);
try {
setResponse(null);
setError(null);
const response = await fetch(url, {method, body, headers: {
'Content-Type': 'application/json'
// 'Content-Type': 'application/x-www-form-urlencoded',
}});
setLoading(false);
if (response.ok) {
const json = await response.json();
setResponse(json);
}
if(!response.ok) {
throw new Error(response.statusText);
}
} catch (e) {
setError(e.message);
}
};
const clearError = () => setError(null);
return { loading, error, request, response, clearError };
};
Возникла странная проблема: данные, которые возвращает хук, запаздывают.
Использую хук в одном компоненте:
Код компонента
const getThread = async () => {
try {
await request(`/api/boards/${boardName}/${threadName}`);
if (error) {
// Выполняется при ошибке
}
} catch (e) {
console.error(e.message);
}
}
При успешном запросе возвращается undefined и в Error, и в Response. При следующем запросе хук возвращает правильные данные из предыдущего запроса. Если при первом запросе была ошибка, то хук вернет ее только в следующем, даже если там был успешный запрос.