October 24, 2024

Обновление React Native 0.76: Новая Архитектура по Умолчанию, React Native DevTools и Другие Улучшения

Недавно вышло обновление React Native 0.76, которое принесло значительные изменения и улучшения в экосистему разработчиков. В этом выпуске по умолчанию включена Новая Архитектура, представлены React Native DevTools и внедрены другие важные обновления, результат многолетних усилий команды разработчиков и поддержки сообщества.

Основные Нововведения

1. Новая Архитектура React Native по умолчанию

2. React Native DevTools

3. Ускоренная работа Metro

4. Новые стилевые свойства: Box Shadow и Filter

5. Изменения, нарушающие обратную совместимость

Новая Архитектура React Native по Умолчанию

С выходом версии 0.76 Новая Архитектура React Native становится стандартом для всех новых проектов. Эта переработка внутренних механизмов платформы направлена на улучшение производительности и упрощение разработки высококачественных нативных приложений с использованием React. Команда разработчиков объявила, что Новая Архитектура готова к использованию в продакшене, что открывает новые возможности для разработчиков и обещает значительное развитие React Native в будущем.

React Native DevTools

Одним из ключевых обновлений стало введение React Native DevTools — нового инструмента для отладки приложений. Этот инструмент предлагает разработчикам знакомый интерфейс, основанный на Chrome DevTools, с надежными точками останова, просмотром значений переменных, пошаговой отладкой и мощной консолью JavaScript. Кроме того, интеграция с React DevTools улучшена, что позволяет быстрее и надежнее инспектировать компоненты и профилировать приложения.

Особо стоит отметить улучшенный пользовательский опыт: новое наложение «Paused in Debugger» ясно показывает, когда приложение приостановлено на точке останова, а предупреждения в LogBox теперь отображаются сводкой и скрываются при подключении DevTools. Также DevTools поддерживают мгновенный запуск без дополнительной настройки, что значительно упрощает процесс отладки.

Ускоренная работа Metro

В версии 0.76 была значительно улучшена производительность Metro, сервера, отвечающего за сборку и разрешение модулей. Разработчики отметили, что разрешение модулей стало примерно в 15 раз быстрее, а время сборки «теплых» сборок увеличилось примерно в 4 раза. Эти улучшения существенно сокращают время ожидания разработчиков и делают процесс разработки более плавным и эффективным.

Новые стилевые свойства: Box Shadow и Filter

Обновление также включает два новых стилевых свойства, доступных только в Новой Архитектуре:

boxShadow style:

boxShadow: Позволяет добавлять тени к элементам с возможностью настройки позиции, цвета, размера и размытия тени. Поддерживает как строковый формат, аналогичный CSS, так и объектный формат для большей гибкости.

boxShadow example

Ограничения:

• Цвет тени по умолчанию — чёрный.

• Поддержка обычных теней начиная с версии Android 9+ и поддержка inset-теней начиная с версии Android 10+.

filter style:

filter: Применяет графические фильтры к элементам, такие как яркость, насыщенность, оттенок, размытие и тени. Также поддерживает как строковый, так и объектный форматы.

Ограничения:

• На iOS поддерживаются только яркость и непрозрачность.

• На Android фильтры размытия и теней поддерживаются только на Android 12+.

• Свойство filter подразумевает overflow: hidden, поэтому дочерние элементы будут обрезаться, если выходят за границы родителя.

Breaking Changes

С обновлением пришли и некоторые изменения, которые могут потребовать внимания разработчиков:

1. Удалена зависимость от @react-native-community/cli:

React Native стал фреймворк-агностичным, что позволяет команде быстрее развивать проекты независимо друг от друга. Разработчикам, использующим CLI в своём рабочем процессе, необходимо явно добавить зависимости на CLI в package.json проекта.

// …
"devDependencies": {
  // …
  "@react-native-community/cli": "15.0.0",
  "@react-native-community/cli-platform-android": "15.0.0",
  "@react-native-community/cli-platform-ios": "15.0.0",
},

2. Уменьшение размера Android-приложений на ~3.8 МБ:

За счёт слияния нативных библиотек в libreactnative.so размер приложений на Android уменьшился примерно на 3.8 МБ (около 20% от общего размера), а время запуска приложения сократилось на ~15 мс (~8%). Однако это изменение требует от разработчиков обновления метода onCreate в классе MainApplication для корректной загрузки новой библиотеки.

import com.facebook.react.soloader.OpenSourceMergedSoMapping
import com.facebook.soloader.SoLoader

class MainApplication : Application(), ReactApplication {

  override fun onCreate() {
    super.onCreate()
    SoLoader.init(this, OpenSourceMergedSoMapping)
  }
}

3. Обновление минимальных требований к SDK:

iOS: с версии 13.4 до 15.1

Android: с SDK 23 до SDK 24 (Android 7)

Прочие Изменения

Анимации: Остановлено отправление обновлений состояния в React при зацикленных анимациях, что предотвращает ненужные перерисовки.

DevTools: Удалены вкладки производительности и сети в инспекторе под Новой Архитектурой.

Текстовый движок: Всегда используется AttributedStringBox вместо AttributedString в TextLayoutManager.

Android: Изменена реализация фона представлений.

iOS: Удалён макрос RCT_EXPORT_CXX_MODULE_EXPERIMENTAL для автосвязывания чистых C++ модулей.

Обновление до 0.76

Разработчикам рекомендуется воспользоваться React Native Upgrade Helper для просмотра изменений кода между версиями. Пользователи Expo смогут воспользоваться React Native 0.76 в составе Expo SDK 52. Для создания нового проекта через CLI можно использовать следующую команду:

npx @react-native-community/cli@latest init MyProject --version latest

Важно: Версия 0.76 теперь является последней стабильной версией React Native, а серия 0.73.x больше не поддерживается. Для получения дополнительной информации следует ознакомиться с политикой поддержки React Native.

В целом, обновление React Native 0.76 приносит значительные улучшения и новые возможности, делая платформу ещё более мощной и удобной для разработчиков. Сообщество с нетерпением ожидает дальнейших обновлений и новых функций, которые продолжат развивать экосистему React Native.