Отладка и инструменты
Отладка в React Native отличается от веба. Разберём инструменты.
Console.log
Работает, но вывод идёт в терминал, где запущен Metro bundler, а не в браузер.
console.log('значение:', value);
console.warn('предупреждение');
console.error('ошибка');
React DevTools
Подключается к приложению. Позволяет смотреть дерево компонентов, пропсы, состояние.
npx react-devtools
Или через меню разработчика в приложении.
Меню разработчика
- iOS: Cmd + D в симуляторе
- Android: Cmd + M (macOS) или Ctrl + M (Windows/Linux)
- Устройство: потрясти телефон
Опции:
- Reload
- Debug
- Toggle Inspector
- Performance Monitor
- Fast Refresh
Fast Refresh
Изменения в коде применяются мгновенно, без перезагрузки. Работает для компонентов и хуков. Не работает для изменений в StyleSheet в некоторых случаях — иногда нужен reload.
Инспектор
Toggle Inspector показывает границы компонентов. Клик на элемент — информация о стилях и пропсах.
Performance Monitor
Показывает FPS, использование памяти, количество компонентов.
Отладка в Chrome
Старый способ, сейчас редко. Вместо него — Flipper или React DevTools.
Flipper
Инструмент от Meta для отладки мобильных приложений:
- Просмотр логов
- Инспектор сети
- Layout inspector
- Плагины
В Expo работает через dev client.
Отладка сети
В Flipper — вкладка Network. Показывает все запросы.
Или логирование вручную:
async function apiCall(url: string) {
console.log('→', url);
const start = Date.now();
try {
const res = await fetch(url);
console.log('←', res.status, `${Date.now() - start}ms`);
return res.json();
} catch (e) {
console.error('×', e);
throw e;
}
}
Sentry
Для отслеживания ошибок в продакшене:
npx expo install sentry-expo
import * as Sentry from 'sentry-expo';
Sentry.init({
dsn: 'YOUR_DSN',
enableInExpoDevelopment: false,
debug: __DEV__,
});
Error Boundary
import { ErrorBoundary } from 'react-error-boundary';
<ErrorBoundary
FallbackComponent={({ error, resetErrorBoundary }) => (
<View>
<Text>Что-то пошло не так</Text>
<Text>{error.message}</Text>
<Pressable onPress={resetErrorBoundary}>
<Text>Повторить</Text>
</Pressable>
</View>
)}
>
<App />
</ErrorBoundary>
Логи в продакшене
В dev — console.log. В продакшене — Sentry, LogRocket, Firebase Crashlytics.
Проверка на устройстве
Симулятор не всегда показывает реальное поведение:
- Производительность — на реальном устройстве другая
- Камера, GPS, датчики — только на устройстве
- Жесты — симулятор упрощает
- Размер экрана — реальные устройства разные
Полезные команды
npx expo start --clear # очистка кеша Metro
npx expo start --no-dev # без dev-режима
npx expo-doctor # проверка проекта
npx expo install --check # проверка версий
Если ты уже знаешь React
В вебе — DevTools в браузере. В React Native — React DevTools + Flipper + меню разработчика. Логика та же, инструменты разные.
Итоги
console.logв терминал Metro- React DevTools для компонентов
- Меню разработчика — Reload, Inspector
- Fast Refresh мгновенно применяет код
- Flipper для сети и логов
- Sentry для продакшена
- Тестируй на реальном устройстве