Запросы через fetch в React Native
В React Native для выполнения HTTP-запросов к внешним API используется встроенный глобальный метод fetch. Он полностью совместим с тем, что используется в современных браузерах, и не требует установки дополнительных библиотек.
Метод fetch возвращает промис, который разрешается в объект Response. Чтобы получить тело ответа в виде JSON, нужно вызвать метод .json() у этого объекта — он также возвращает промис.
Простейший пример запроса к публичному API:
const fetchData = async () => {
try {
const response = await fetch('https://jsonplaceholder.typicode.com/users');
const users = await response.json();
console.log(users);
} catch (error) {
console.error('Ошибка сети:', error);
}
};
Важно помнить два ключевых момента:
fetchне выбрасывает ошибку при HTTP-статусах вроде 404 или 500. Он считает их успешными ответами, потому что соединение установлено и сервер ответил. Поэтому нужно дополнительно проверять свойствоresponse.ok(оно равноtrue, если статус в диапазоне 200–299).- Ошибки действительно возникают только при проблемах с сетью: отсутствие интернета, недоступность хоста и т.п.
Пример с проверкой статуса:
const response = await fetch('https://api.example.com/data');
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
Такой подход позволяет надёжно обрабатывать как сетевые, так и логические ошибки на стороне сервера.
Отправка данных
Для отправки данных (например, при создании ресурса) используется второй аргумент fetch — объект с настройками запроса:
const createUser = async (userData: { name: string; email: string }) => {
const response = await fetch('https://api.example.com/users', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(userData),
});
if (!response.ok) {
throw new Error('Не удалось создать пользователя');
}
return await response.json();
};
Этот шаблон применим ко всем типам запросов: GET, POST, PUT, PATCH, DELETE.
Особенности в React Native
В отличие от веба, в React Native:
- Нет политики CORS — приложение может делать запросы на любой домен без ограничений.
- Все запросы выполняются через нативные модули (NSURLSession на iOS, OkHttp на Android), поэтому работают даже при отключённом Wi-Fi, если есть мобильный интернет.
Это упрощает интеграцию с бэкендом по сравнению с веб-разработкой.