Введение
В этом лабораторном занятии мы узнаем о хуке useFetch в React. Этот хук позволяет нам реализовать метод fetch() в декларативном стиле, что делает получение данных из API и обновление состояния компонента проще. Мы создадим пользовательский хук, который принимает URL и параметры, и асинхронно вызывает fetch() для обновления переменных состояния ответа, ошибки и отмены.
Хуки useFetch в React
В ВМ уже предоставлены
index.htmlиscript.js. В общем, вам нужно только добавить код вscript.jsиstyle.css.
Вот код:
const useFetch = (url, options) => {
const [response, setResponse] = React.useState(null);
const [error, setError] = React.useState(null);
const [abort, setAbort] = React.useState(() => {});
React.useEffect(() => {
const abortController = new AbortController();
const signal = abortController.signal;
const fetchData = async () => {
try {
const res = await fetch(url, { ...options, signal });
const json = await res.json();
setResponse(json);
} catch (error) {
setError(error);
}
};
fetchData();
return () => {
abort();
};
}, []);
return { response, error, abort };
};
const ImageFetch = (props) => {
const res = useFetch("https://dog.ceo/api/breeds/image/random", {});
if (!res.response) {
return <div>Loading...</div>;
}
const imageUrl = res.response.message;
return (
<div>
<img src={imageUrl} alt="avatar" width={400} height="auto" />
</div>
);
};
ReactDOM.createRoot(document.getElementById("root")).render(<ImageFetch />);
Пояснение:
- Целью кода является реализация вызова
fetch()в декларативном стиле с использованием хуков React. - Хуки
useFetchпринимает два параметра:urlи объектoptions. - Хуки инициализирует три переменные состояния с использованием хуков
useState():response,errorиabort. - Хуки
useEffect()используется для асинхронного вызоваfetch()и соответствующего обновления переменных состояния. AbortControllerиспользуется для возможности отмены запроса, и он используется для отмены запроса при размонтировании компонента.- Хуки возвращает объект, содержащий переменные состояния
response,errorиabort. - Компонент
ImageFetchиспользует хукиuseFetchдля получения случайной картинки собаки и отображения ее в элементе<img>.
Пожалуйста, нажмите кнопку 'Go Live' в нижнем правом углу, чтобы запустить веб-сервис на порту 8080. Затем вы можете обновить вкладку Web 8080, чтобы просмотреть веб-страницу.
Резюме
Поздравляем! Вы завершили лабораторную работу по хукам useFetch в React. Вы можете практиковаться в более многих лабораторных работах в LabEx, чтобы улучшить свои навыки.