Fetch API — это современный нативный браузерный интерфейс для выполнения HTTP-запросов, который пришел на смену устаревшему XMLHttpRequest. Это promise-based API, предоставляющее более простой и мощный способ работы с сетевыми запросами.
fetch('https://api.example.com/data')
.then(response => {
if (!response.ok) {
throw new Error('Network response was not ok');
}
return response.json();
})
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
import { useState, useEffect } from 'react';
function DataFetcher() {
const [data, setData] = useState(null);
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);
useEffect(() => {
const fetchData = async () => {
try {
const response = await fetch('https://api.example.com/data');
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const result = await response.json();
setData(result);
} catch (err) {
setError(err.message);
} finally {
setLoading(false);
}
};
fetchData();
}, []); // Пустой массив зависимостей = выполняется один раз при монтировании
if (loading) return <div>Loading...</div>;
if (error) return <div>Error: {error}</div>;
return <div>{JSON.stringify(data)}</div>;
}
async function postData(url = '', data = {}) {
const response = await fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(data),
});
return response.json();
}
// Использование в компоненте:
const handleSubmit = async (formData) => {
try {
const result = await postData('/api/submit', formData);
console.log('Success:', result);
} catch (error) {
console.error('Error:', error);
}
};
fetch('https://api.example.com/data', {
headers: new Headers({
'Authorization': 'Bearer ' + token,
'Content-Type': 'application/json'
})
});
useEffect(() => {
const controller = new AbortController();
const signal = controller.signal;
const fetchData = async () => {
try {
const response = await fetch('https://api.example.com/data', {
signal
});
// Обработка данных
} catch (err) {
if (err.name === 'AbortError') {
console.log('Fetch aborted');
} else {
// Обработка других ошибок
}
}
};
fetchData();
return () => controller.abort(); // Отмена запроса при размонтировании
}, []);
const uploadFile = async (file) => {
const formData = new FormData();
formData.append('file', file);
const response = await fetch('/api/upload', {
method: 'POST',
body: formData,
// Заголовок Content-Type не нужен для FormData!
});
return response.json();
};
Преимущества Fetch API:
Недостатки Fetch API:
Пример вспомогательной функции:
async function fetchJson(url, options = {}) {
const response = await fetch(url, {
...options,
headers: {
'Content-Type': 'application/json',
...options.headers,
},
body: options.body ? JSON.stringify(options.body) : undefined,
});
if (!response.ok) {
const error = new Error(`HTTP error! status: ${response.status}`);
error.status = response.status;
throw error;
}
return response.json();
}
import { useQuery } from 'react-query';
function UserList() {
const { data, isLoading, error } = useQuery('users', () =>
fetch('/api/users').then(res => res.json())
);
// Отрисовка компонента
}
Fetch API — это мощный нативный инструмент для HTTP-запросов в React-приложениях. Для базовых сценариев он отлично подходит без дополнительных зависимостей. Для сложных случаев можно комбинировать его с библиотеками типа React Query или перейти на Axios. Ключевые моменты — правильная обработка ошибок и состояний загрузки.