Dev48
ЯЗЫК
  • О нас
  • Услуги
  • Индустрии
  • Технологии
  • Статьи
  • Контакты
Забронировать звонок
    Главная/Статьи/React native 080 react 191 izmeneniya js api zamorozka ustarevshey arhitektury i
Dev48

© 2026 · All rights reserved.

React Native 0.80 — React 19.1, изменения JS API, заморозka устаревшей архитектуры и многое другое

Источник: React Native

React Native 0.80 — React 19.1, изменения JS API, заморозka устаревшей архитектуры и многое другое

Источник: React Native

Сегодня мы рады объявить о выходе React Native 0.80!

25 сентября 2026 г.

Сегодня мы рады объявить о выходе React Native 0.80!

Этот выпуск приносит версию React, поставляемую внутри React Native, до последней доступной стабильной: 19.1.0.

Мы также выпускаем ряд улучшений стабильности для нашего JS API: глубокие импорты (deep imports) теперь будут вызывать предупреждение, и мы предлагаем новый необязательный строгий TypeScript API (Strict TypeScript API), который предоставляет более точные и безопасные в использовании типы.

Более того, устаревшая архитектура (Legacy Architecture) React Native теперь официально заморожена, и вы начнете видеть предупреждения для API, которые перестанут работать после полного прекращения поддержки устаревшей архитектуры.

Основные моменты​

  • Устаревание глубоких импортов JavaScript
  • Заморозка устаревшей архитектуры и предупреждения
  • React 19.1.0
  • Экспериментально: зависимости React Native для iOS теперь предварительно собраны

Основные моменты​

Устаревание глубоких импортов JavaScript​

В этом выпуске мы предпринимаем шаги по улучшению и стабилизации публичного JavaScript API React Native. первым шагом к этому является более четкое определение того, какие из наших API могут импортироваться приложениями и фреймворками. В связи с этим мы официально объявляем глубокие импорты из React Native устаревшими (см. RFC) и внедряем предупреждения через ESLint и JS-консоль.

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

// До — импорт из подпути

import {Alert} from 'react-native/Libraries/Alert/Alert';

// После — импорт из `react-native`

import {Alert} from 'react-native';

Некоторые API не экспортируются в корне и станут недоступны без глубоких импортов. Это сделано намеренно для уменьшения общей поверхности API React Native. У нас открыта ветка отзывов для пользователей, и мы будем работать с сообществом над окончательным определением того, какие API мы будем экспортировать в течение (как минимум) следующих двух релизов React Native. Пожалуйста, поделитесь своими отзывами!

Узнайте больше об этом изменении в нашей специальной статье: Движение к стабильному JavaScript API.

Строгий TypeScript API (опционально)​

Вместе с вышеуказанным переопределением экспортов в нашем публичном API мы также выпускаем в версии 0.80 новый набор типов TypeScript для пакета react-native, который мы называем строгим TypeScript API (Strict TypeScript API).

Переход на строгий TypeScript API — это предварительный просмотр нашего будущего стабильного JavaScript API для React Native. Эти новые типы:

  • Генерируются непосредственно из нашего исходного кода — что улучшает покрытие и корректность, поэтому вы можете рассчитывать на более прочные гарантии совместимости.
  • Ограничены индексным файлом React Native — более точно определяют наш публичный API, что означает, что мы не сломаем API при внесении изменений во внутренние файлы.

Мы выпускаем их параллельно с нашими существующими типами, а значит, вы можете мигрировать тогда, когда будете готовы. Кроме того, если вы используете стандартные API React Native, многие приложения должны проходить проверку без каких-либо изменений. Мы настоятельно рекомендуем ранним последователям и вновь создаваемым приложениям активировать этот режим через файл tsconfig.json.

Когда сообщество будет готово, строгий TypeScript API станет нашим API по умолчанию в будущем — одновременно с удалением глубоких импортов.

Узнайте больше об этом изменении в нашей специальной статье: Движение к стабильному JavaScript API.

Заморозка устаревшей архитектуры и предупреждения​

Новая архитектура (New Architecture) React Native является выбором по умолчанию начиная с версии 0.76, и мы читаем истории успеха проектов и инструментов, которые получают от нее огромную пользу.

Недавно мы сообщили, что теперь считаем устаревшую архитектуру (Legacy Architecture) замороженной. Мы больше не будем разрабатывать новые исправления багов или функции в устаревшей архитектуре и перестанем тестировать ее при подготовке релизов.

Чтобы сделать миграцию более плавной, мы все еще позволяем пользователям отказаться от Новой архитектуры, если вы сталкиваетесь с багами или регрессиями.

Тем не менее, поддержка двух архитектур в React Native — это огромная сложность, которая влияет на производительность выполнения, размер приложения и обслуживание нашей кодовой базы.

Именно поэтому в будущем нам в конечном итоге придется отказаться от устаревшей архитектуры.

В версии 0.80 мы добавили ряд предупреждений, которые будут появляться в React Native DevTools, чтобы предупредить вас, если вы используете API, которые не будут работать в Новой архитектуре.

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

Вы можете узнать больше об этих изменениях в докладе «Жизнь после устаревшего: будущее Новой архитектуры», который мы недавно представили на App.js.

React 19.1.0​

Этот выпуск React Native поставляется с последней стабильной версией React: 19.1.0.

Вы можете прочитать обо всех новых функциях и исправлениях багов, представленных в React 19.1.0, в описании релиза.

предупреждение

Одной из заметных особенностей React 19.1.0 является реализация и улучшение стеков владельцев (owner stacks). Это функция, предназначенная только для разработки, которая должна помочь вам определить, какой компонент несет ответственность за конкретную ошибку.

Тем не менее, мы знаем, что стеки владельцев работают в React Native не так, как ожидалось, если вы используете плагин Babel @babel/plugin-transform-function-name, который включен по умолчанию в пресет Babel для React Native. Мы выпустим исправление для этого в одном из будущих релизов React Native.

Экспериментально: зависимости React Native для iOS теперь предварительно собраны​

Если вы собираете приложение React Native для iOS, вы, вероятно, заметили, что первая нативная сборка занимает некоторое время: пару минут или даже больше на старых компьютерах. Это происходит потому, что нам нужно скомпилировать весь код React Native для iOS плюс все его зависимости.

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

React Native 0.80 — это первый релиз, который может поставлять часть React Native для iOS в виде предварительной сборки для сокращения времени компиляции.

В процессе выпуска React Native мы создаем XCFramework под названием ReactNativeDependencies.xcframework, который представляет собой предварительно собленную версию только сторонних зависимостей, от которых зависит React Native.

Мы провели эксперименты и замерили, сколько времени экономит эта первоначальная предварительная сборка для iOS. Согласно нашим бенчмаркам, запущенным на компьютере с M4, сборки под iOS выполняются примерно на 12% быстрее с предварительной сборкой, чем при сборке из исходного кода.

Основываясь на нашем опыте, мы также заметили, что несколько отчетов об ошибках от пользователей вызваны проблемами сборки, связанными со сторонними зависимостями React Native (например, #39568). Предварительная сборка сторонних зависимостей позволяет нам собирать их за вас, так что вы больше не столкнетесь с этими проблемами сборки.

Обратите внимание, что мы не собираем предварительно весь React Native целиком: мы предварительно собираем только те библиотеки, которые Meta не контролирует напрямую, такие как Folly и GLog.

В будущем релизе мы также выпустим остальную часть ядра React Native в виде предварительной сборки.

Как их использовать​

Эта функция все еще является экспериментальной, поэтому она не включена по умолчанию.

Если вы хотите ее использовать, вы можете установить свои поды, добавив переменную окружения RCT_USE_RN_DEP:

RCT_USE_RN_DEP=1 bundle exec pod install

Кроме того, если вы хотите включить это для всех разработчиков, работающих над проектом, вы можете изменить свой Podfile следующим образом:

if linkage != nil

Pod::UI.puts "Configuring Pod with #{linkage}ally linked Frameworks".green

use_frameworks! :linkage => linkage.to_sym

end

+ENV['RCT_USE_RN_DEP'] = '1'

target 'HelloWorld' do

config = use_native_modules!

Пожалуйста, сообщайте о любых проблемах, которые предварительные сборки могут вызвать у вас или вашего приложения, в этой дискуссии. Мы стремимся изучить их и сделать так, чтобы их использование было прозрачным для вашего приложения.

Другие изменения

Android — уменьшенный размер APK благодаря IPO

Этот выпуск содержит значительное уменьшение размера всех приложений для Android, созданных с использованием React Native. Начиная с версии 0.80, мы включили межпроцедурную оптимизацию (Interprocedural Optimization) как для сборок React Native, так и для Hermes.

Это позволило сэкономить около 1 МБ для всех приложений Android.

Вы получите это уменьшение размера, обновив версию React Native до 0.80, и никаких дополнительных изменений в вашем проекте не требуется.

Редизайн экрана нового приложения

Если вы не используете Expo, но используете Community CLI & Template, в этой версии мы перенесли экран нового приложения в отдельный пакет и обновили его внешний вид. Это сокращает количество шаблонного кода при создании нового приложения с помощью шаблона сообщества, а также обеспечивает лучший пользовательский опыт при просмотре на больших экранах.

React Native 0.80 — это последняя версия React Native, которая предлагает официальную поддержку JSC. Поддержка JSC будет осуществляться через поддерживаемый сообществом пакет @react-native-community/javascriptcore.

Если вы пропустили анонс, вы можете прочитать о нем подробнее здесь.

Критические изменения

Добавлено поле "exports" в главный пакет

В рамках наших изменений стабильного JS API мы добавили поле "exports" в манифест package.json пакета react-native.

В версии 0.80 это сопоставление по умолчанию по-прежнему предоставляет все подпути JavaScript, поэтому оно не должно быть серьезным критическим изменением. В то же время это может незаметно повлиять на разрешение модулей внутри пакета react-native:

  • В Metro расширения для конкретных платформ не будут автоматически обрабатываться при сопоставлении с "exports". Мы предоставили ряд модулей-прокладок (shim), чтобы учесть это (#50426).
  • В Jest возможность создания заглушек для глубоких импортов может измениться, что может потребовать обновления тестов.

Другие критические изменения

Этот список содержит ряд других критических изменений, которые, как мы полагаем, могут оказать незначительное влияние на код вашего продукта и заслуживают внимания:

JS

  • Мы обновили eslint-plugin-react-hooks с версии v4.6.0 до v5.2.0 (полный список изменений смотрите здесь). Правила линтинга react-hooks могут выдавать новые сигналы об ошибках, которые вам придется исправить или подавить.

Android

  • В этом выпуске версия Kotlin, поставляемая с React Native, обновлена до версии 2.1.20. Kotlin 2.1 представляет новые языковые функции в режиме предварительного просмотра, которые вы можете начать использовать в своих модулях/компонентах. Подробнее читайте в официальных примечаниях к выпуску.
  • Мы удалили класс StandardCharsets. Он был помечен как устаревший начиная с версии 0.73. Вместо него следует использовать класс java.nio.charset.StandardCharsets.
  • Мы сделали несколько классов внутренними (internal). Эти классы не являются частью публичного API и не должны использоваться. Мы уже уведомили затронутые библиотеки или отправили для них патчи: com.facebook.react.fabric.StateWrapperImpl com.facebook.react.modules.core.ChoreographerCompat com.facebook.react.modules.common.ModuleDataCleaner
  • com.facebook.react.fabric.StateWrapperImpl
  • com.facebook.react.modules.core.ChoreographerCompat
  • com.facebook.react.modules.common.ModuleDataCleaner
  • Мы перенесли несколько классов с Java на Kotlin. Если вы используете эти классы, обнуляемость (nullability) и типы некоторых параметров изменились, поэтому вам может потребоваться скорректировать свой код: Все классы внутри com.facebook.react.devsupport com.facebook.react.bridge.ColorPropConverter com.facebook.react.views.textinput.ReactEditText com.facebook.react.views.textinput.ReactTextInputManager
  • Все классы внутри com.facebook.react.devsupport
  • com.facebook.react.bridge.ColorPropConverter
  • com.facebook.react.views.textinput.ReactEditText
  • com.facebook.react.views.textinput.ReactTextInputManager

iOS

  • Мы удалили поле RCTFloorPixelValue из RCTUtils.h — метод RCTFloorPixelValue не использовался в React Native, и мы удалили его полностью.

Другие, более мелкие критические изменения перечислены в файле CHANGELOG для версии 0.80.

Благодарности

React Native 0.80 содержит более 1167 коммитов от 127 контрибьюторов. Спасибо за вашу тяжелую работу!

Мы хотим выразить особую благодарность тем участникам сообщества, которые внесли значительный вклад в этот выпуск:

  • Кристиану Фальчу (Christian Falch) за работу над предварительными сборками iOS для зависимостей React Native.
  • Иво Плазе (Iwo Plaza), Якубу Пясецкому (Jakub Piasecki) и Давиду Малецкому (Dawid Małecki) за их работу над строгим TypeScript API.

Кроме того, мы хотим поблагодарить остальных авторов, которые работали над документированием функций в этой публикации:

  • Риккардо Чипольдески (Riccardo Cipolleschi) за написание части, посвященной предварительным сборкам iOS для зависимостей React Native.
  • Алексу Ханту (Alex Hunt) за прекращение поддержки глубоких импортов, опциональный строгий TypeScript API и редизайн экрана нового приложения.
  • Николе Корти (Nicola Corti) за заморозку устаревшей архитектуры и предупреждения.

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

Пожалуйста, используйте React Native Upgrade Helper для просмотра изменений кода между версиями React Native для существующих проектов, а также документацию по обновлению.

Чтобы создать новый проект:

Если вы используете Expo, React Native 0.80 будет поддерживаться в canary-выпуске Expo SDK. Инструкции о том, как использовать React Native 0.80 в Expo, также доступны в специальной публикации в блоге.

info

Версия 0.80 теперь является последней стабильной версией React Native, а версия 0.77.x переходит в категорию неподдерживаемых. Для получения дополнительной информации см. политику поддержки React Native. Мы планируем опубликовать финальное обновление в связи с окончанием срока поддержки (end-of-life) версии 0.77 в ближайшем будущем.

← Все статьи