Dev48
ЯЗЫК
  • О нас
  • Услуги
  • Индустрии
  • Технологии
  • Статьи
  • Контакты
Забронировать звонок
    Главная/Статьи/React native 080 react 191 izmeneniya js api zamorozka ustarevshey arhitektury i
Dev48
info@dev48.org+375 29 320-40-96WhatsApp@isky_by

© 2026 · Все права защищены.

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

Источник: React Native•25 сентября 2026 г. в 02:36

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

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

Сегодня мы с радостью выпускаем React Native 0.80!

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

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

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

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

  • Устаревание глубоких импортов JavaScript
  • Заморозка Legacy Architecture и предупреждения
  • 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.

Дополнительный Strict TypeScript API​

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

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

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

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

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

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

Заморозка Legacy Architecture и предупреждения​

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

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

Чтобы сделать миграцию более плавной, мы по-прежнему позволяем пользователям отказаться от New Architecture, если вы столкнулись с ошибками или регрессиями.

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

Именно поэтому в будущем нам в какой-то момент придется прекратить поддержку Legacy Architecture.

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

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

Вы можете узнать больше об этих изменениях в докладе «Жизнь после устаревшей архитектуры: будущее новой архитектуры», который мы недавно представили на 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 плюс все его зависимости.

В последние недели мы экспериментировали с предварительной сборкой (prebuilding) части ядра 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 и шаблон, в этой версии мы перенесли экран нового приложения в его собственный пакет и обновили его внешний вид. Это сокращает объем начального стандартного кода при создании нового приложения с помощью шаблона сообщества, а также обеспечивает более удобное отображение на экранах большего размера.

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

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

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

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

В рамках изменений стабильного API JavaScript мы добавили поле "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. Если вы используете эти классы, требования к наличию null и типы некоторых параметров изменились, поэтому вам может потребоваться скорректировать свой код: Все классы внутри 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, и мы удалили его полностью.

Другие, более мелкие критические изменения перечислены здесь: in the CHANGELOG for 0.80.

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

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

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

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

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

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

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

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

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

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

info

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

← Все статьи

О чём эта статья