React Native позволяет выпускать приложения для iOS и Android из общей кодовой базы, но это не означает «написали один раз и больше не думаем о платформах». Надёжный продукт требует архитектуры, контроля зависимостей, тестирования на реальных устройствах и отдельной дисциплины релизов.
Первоначальная версия этой статьи была опубликована в 2025 году и сводилась к нескольким общим советам. К сентябрю 2026 года актуальная стабильная ветка React Native — 0.87, Strict TypeScript API используется по умолчанию, а New Architecture давно перестала быть экспериментальным дополнением. Поэтому руководство полностью обновлено.
Когда React Native подходит проекту
Фреймворк особенно полезен, если:
- продукт должен одновременно работать на iOS и Android;
- большая часть сценариев и интерфейсов общая;
- команде важна скорость согласованных релизов;
- уже есть экспертиза в React и TypeScript;
- приложение активно работает с API;
- отдельные нативные функции можно изолировать в модулях.
Нативная разработка может оказаться разумнее для приложения, где почти вся ценность связана с тяжёлой графикой, специфическими API платформы, обработкой видео в реальном времени или глубокой интеграцией с операционной системой. Решение принимается по критическим сценариям, а не по количеству экранов.
Зафиксируйте поддерживаемую платформу
У мобильного проекта несколько взаимосвязанных версий:
- React Native и React;
- Node.js и пакетный менеджер;
- Xcode, Swift и минимальная iOS;
- Android Gradle Plugin, Gradle, Kotlin и Android SDK;
- нативные библиотеки;
- Expo SDK, если проект использует Expo.
React Native 0.87 повысил требования до Node.js 22, AGP 9 и Kotlin 2.0+, а Strict TypeScript API сделал стандартным. Перед обновлением проверьте матрицу совместимости и Upgrade Helper, а не меняйте все зависимости одновременно.
В репозитории полезно хранить точные версии инструментов, lock-файл и инструкцию сборки чистого окружения. Если приложение собирается только на ноутбуке одного разработчика, релизный процесс уже ненадёжен.
Архитектура по функциям, а не по типам файлов
Папки components, screens, services быстро превращаются в общие склады. Практичнее выделять функциональные модули:
- авторизация;
- каталог;
- запись или заказ;
- сообщения;
- профиль;
- уведомления.
Внутри каждого модуля находятся экран, модель данных, запросы, локальные компоненты и тесты. Общими остаются дизайн-система, навигационная оболочка, работа с сетью, аналитика и инфраструктурные адаптеры.
Так проще понять владельца изменения и удалить функцию целиком, не разыскивая её п о всему проекту.
Не складывайте все данные в один store
Разделяйте как минимум три типа состояния.
Серверные данные
Списки, карточки и статусы, которые приходят из API, требуют кэша, повторной загрузки, обработки устаревания и ошибок. Для них подходит библиотека запросов или выделенный слой репозитория.
Состояние интерфейса
Открытая вкладка, выбранный фильтр и состояние модального окна часто должны оставаться рядом с экраном. Глобальный store здесь только усложняет зависимости.
Долговременные локальные данные
Токены, настройки, очередь офлайн-действий и черновики требуют отдельного защищённого хранилища и миграций формата. Секреты нельзя хранить в обычном AsyncStorage без оценки риска.
