Практика KorDevTeam8 мин

Разработка на React Native в 2026 году: архитектура, производительность и релизы

  • React Native
  • Мобильная разработка
  • TypeScript
  • Производительность
  • Архитектура приложений
Разработка мобильного приложения на React Native

Актуальный разбор React Native 0.87: архитектура по функциям, состояние, производительность, сеть, offline, глубокие ссылки, тестирование и выпуск приложений.

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 без оценки риска.

Выбор Context, Zustand, Redux Toolkit или другой библиотеки вторичен. Важнее заранее определить владельца данных и жизненный цикл.

Производительность измеряют, а не угадывают

React.memo не является универсальным ускорителем. Мемоизация тоже имеет стоимость и помогает только при стабильных свойствах и заметных лишних рендерах.

Начните с профилирования:

  1. Воспроизведите проблему на релизной сборке.
  2. Определите, тормозит JavaScript, нативный поток, сеть или изображения.
  3. Запишите исходный показатель.
  4. Измените одну причину.
  5. Повторите измерение на том же устройстве.

React Native DevTools даёт Network и Performance panels, а Performance API позволяет собирать часть показателей и в рабочем приложении.

Длинные списки: FlatList вместо огромного ScrollView

Для большой коллекции используйте FlatList или SectionList, но настройка зависит от контента.

Проверьте:

  • стабильный keyExtractor;
  • размер первой партии элементов;
  • тяжесть renderItem;
  • размеры изображений;
  • необходимость getItemLayout для фиксированной высоты;
  • состояние, которое должно сохраняться за пределами окна;
  • пустое состояние, загрузку и повтор после ошибки.

Официальная документация предупреждает: виртуализированный список отрисовывает содержимое вне экрана асинхронно, поэтому чрезмерно быстрая прокрутка может показать пустую область. Настройки нужно подбирать на реальных данных, а не копировать из случайного примера.

Сеть и офлайн-режим

У каждого запроса должны быть:

  • явный таймаут;
  • возможность отмены;
  • типизированный ответ;
  • различение сетевой и бизнес-ошибки;
  • безопасный повтор;
  • корреляционный идентификатор;
  • понятное состояние для пользователя.

Повторять запрос на чтение обычно безопасно. Повтор оплаты, создания заказа или отправки формы может создать дубль — сервер должен поддерживать идемпотентность.

Офлайн-режим не равен бесконечному повтору. Для очереди изменений нужны статус, время, количество попыток, правило конфликта и экран, где пользователь увидит неотправленные действия.

Навигация и глубокие ссылки

Маршрут — часть контракта приложения. Проверьте:

  • открытие ссылки при закрытом и запущенном приложении;
  • восстановление после авторизации;
  • истёкшую или недоступную сущность;
  • push-уведомление с переходом;
  • back-навигацию;
  • сохранение параметров после обновления;
  • соответствие Universal Links и App Links.

Нельзя считать сценарий готовым, если экран открывается только через последовательное нажатие кнопок из главного меню.

Нативные зависимости требуют особого контроля

Перед подключением библиотеки проверьте:

  • поддержку текущей версии React Native;
  • совместимость с New Architecture;
  • частоту выпусков и открытые критические ошибки;
  • размер и разрешения;
  • влияние на сборку iOS и Android;
  • наличие альтернативы в платформе или Expo;
  • план удаления.

Если функция нужна в одном месте, спрячьте библиотеку за собственным адаптером. Тогда миграция не потребует менять десятки экранов.

Ошибки и наблюдаемость

Error Boundary ловит ошибки рендера React, но не заменяет обработку промисов, сетевых ошибок и нативных сбоев.

Для расследования нужны:

  • версия приложения и сборки;
  • платформа и версия ОС;
  • модель устройства;
  • экран и последнее безопасное действие;
  • correlation ID запроса;
  • стек без персональных данных;
  • признак offline/online;
  • флаги функций.

Пользователь должен увидеть понятное действие: повторить, сохранить черновик, вернуться или обратиться в поддержку. Белый экран без контекста — не обработка ошибки.

Стратегия тестирования

Разделите проверки по стоимости.

  • Юнит-тесты — преобразования, валидация, расчёты и редьюсеры.
  • Компонентные тесты — состояния экрана и доступность.
  • Интеграционные — сеть, хранилище, навигация и разрешения.
  • End-to-end — несколько критических пользовательских маршрутов.
  • Ручная матрица — реальные iOS/Android устройства, плохая сеть, фон и обновление версии.

Снимки компонентов не доказывают, что человек может оформить заказ или восстановить незавершённое действие.

Чек-лист перед релизом

  • Сборка воспроизводится в CI.
  • Версии инструментов зафиксированы.
  • Проверены миграции локальных данных.
  • Критические запросы идемпотентны.
  • Логи не содержат токены и персональные данные.
  • Глубокие ссылки работают из закрытого приложения.
  • Протестированы пустые, ошибочные и offline-состояния.
  • Проверены производительность и память на реальном устройстве.
  • Настроены crash-reporting и correlation ID.
  • Есть план отката серверной функции или feature flag.

React Native экономит усилия на общей продуктовой логике, но не отменяет инженерную дисциплину мобильной разработки. Мы используем этот подход, когда общая кодовая база действительно ускоряет развитие продукта, а специфические части iOS и Android можно чётко выделить и проверить.


Теги: React Native, Мобильная разработка, TypeScript, Производительность, Архитектура приложений Дата публикации: 20 октября 2025 Дата обновления: 25 сентября 2026

Микросервисная архитектура на Node.js и NestJS: когда она оправдана

Микросервисная архитектура / Node.js

Микросервисная архитектура на Node.js и NestJS: когда она оправдана

· 8 мин

Практическое руководство по микросервисам на Node.js и NestJS: критерии выбора, границы, сообщения, повторы, согласованность данных и эксплуатация.

Читать далее
Разработка REST API на Laravel: архитектура, безопасность и тестирование

Laravel / PHP

Разработка REST API на Laravel: архитектура, безопасность и тестирование

· 9 мин

Проектирование REST API на Laravel 13: контракт, ресурсы, бизнес-правила, аутентификация, права, идемпотентность, rate limiting, очереди и тесты.

Читать далее
Мобильная CRM для малого бизнеса: как связать приложение, инфраструктуру и модули

Мобильная CRM / Малый бизнес

Мобильная CRM для малого бизнеса: как связать приложение, инфраструктуру и модули

· 9 мин

На примере развития Krasotula CRM разбираем мобильные сценарии, API, инфраструктуру, безопасность и модульную архитектуру продукта.

Читать далее