Przejdź do treści głównej

React Native 0.84 - Hermes V1 domyślnie

· 7 minut czytania
Alex Hunt
Alex Hunt
Software Engineer @ Meta
Alan Lee
Alan Lee
Software Engineer @ Meta
Christian Falch
Christian Falch
Software Engineer @ Expo
Gabriel Donadel Dall'Agnol
Gabriel Donadel Dall'Agnol
Software Engineer @ Expo
Nieoficjalne Tłumaczenie Beta

Ta strona została przetłumaczona przez PageTurner AI (beta). Nie jest oficjalnie zatwierdzona przez projekt. Znalazłeś błąd? Zgłoś problem →

Z przyjemnością ogłaszamy wydanie React Native 0.84!

Ta wersja ustawia Hermes V1 jako domyślny silnik JavaScript, przynosząc znaczącą poprawę wydajności wszystkim aplikacjom React Native. Kontynuowaliśmy także usuwanie starszej architektury (Legacy Architecture) na iOS i Androidzie oraz domyślnie dostarczamy prekompilowane pliki binarne dla iOS.

Najważniejsze zmiany

Hermes V1 domyślnie

Hermes V1 jest teraz domyślnym silnikiem JavaScript dla React Native na iOS i Androidzie, po wstępnej eksperymentalnej opcji w React Native 0.82.

Hermes V1 reprezentuje kolejny krok w ewolucji silnika Hermes, z znaczącymi ulepszeniami zarówno kompilatora, jak i maszyny wirtualnej (VM), które zapewniają zauważalnie lepszą wydajność JavaScript.

Co to oznacza dla Twojej aplikacji

  • Automatyczny wzrost wydajności: Wszystkie aplikacje będą domyślnie używać Hermes V1, co przyniesie poprawę szybkości wykonania i zmniejszy użycie pamięci.

  • Brak konieczności migracji: Jeśli już używasz Hermes (domyślnie od wersji 0.70), automatycznie otrzymasz Hermes V1. Nie są wymagane żadne zmiany konfiguracji.

Opting out from Hermes V1

Package manager override

Force the installation of the legacy hermes-compiler package in your package.json:

package.json
"overrides": { "hermes-compiler": "0.15.0" }

iOS

When installing CocoaPods dependencies, pass the RCT_HERMES_V1_ENABLED=0 and RCT_USE_PREBUILT_RNCORE=0 environment variables.

Android

Add hermesV1Enabled=false inside the android/gradle.properties file, and configure the application to build React Native from source.

Prekompilowane pliki binarne dla iOS domyślnie

React Native 0.84 domyślnie dostarcza prekompilowane pliki binarne dla iOS. Wcześniej dostępne jako opcja do włączenia, teraz są one domyślnie włączone, co znacząco skraca czas budowania aplikacji na iOS.

Oznacza to, że nie musisz już kompilować rdzenia React Native ze źródeł przy każdym czystym budowaniu. Prekompilowane pliki binarne .xcframework są automatycznie pobierane i używane podczas pod install.

informacja

Jeśli potrzebujesz zbudować React Native ze źródeł (na przykład, aby zrezygnować z Hermes V1), możesz wyłączyć prekompilowane pliki binarne, ustawiając RCT_USE_PREBUILT_RNCORE=0 podczas instalacji podów.

Usunięto komponenty starszej architektury

Kontynuując pracę rozpoczętą w wersji 0.82 (która uczyniła Nową Architekturę jedyną opcją środowiska uruchomieniowego), React Native 0.84 nadal usuwa kod starszej architektury z iOS i Androida. Jak opisano w RFC, usuwamy kilka klas starszej architektury w każdej wersji.

iOS

W wersji 0.83 wprowadziliśmy eksperymentalną flagę RCT_REMOVE_LEGACY_ARCH do wykluczania kodu starszej architektury. W 0.84 jest to teraz zachowanie domyślne — kod starszej architektury nie jest już uwzględniany w budowaniach na iOS, zmniejszając zarówno czas budowania, jak i rozmiar aplikacji.

Nie spodziewamy się problemów w aplikacjach korzystających już z Nowej Architektury — kod warstwy interoperacyjności (Interop Layer) wymagany dla kompatybilności pozostaje na swoim miejscu.

Re-enabling Legacy Architecture code on iOS

If you need to re-enable Legacy Architecture code in your iOS builds, you'll need to build from source. Install CocoaPods dependencies with the following flags:

RCT_USE_PREBUILT_RNCORE=0 RCT_REMOVE_LEGACY_ARCH=0 bundle exec pod install

Android

Removed Legacy Architecture classes

The following classes have been removed in this release:

com.facebook.react.LazyReactPackage
com.facebook.react.bridge.CxxModuleWrapper
com.facebook.react.bridge.CxxModuleWrapperBase
com.facebook.react.bridge.CallbackImpl
com.facebook.react.bridge.NotThreadSafeBridgeIdleDebugListener
com.facebook.react.bridge.OnBatchCompleteListener
com.facebook.react.bridge.ReactCxxErrorHandler
com.facebook.react.bridge.ReactInstanceManagerInspectorTarget
com.facebook.react.modules.debug.DidJSUpdateUiDuringFrameDetector
com.facebook.react.devsupport.BridgeDevSupportManager
com.facebook.react.uimanager.NativeKind
com.facebook.react.uimanager.debug.NotThreadSafeViewHierarchyUpdateDebugListener
com.facebook.react.uimanager.layoutanimation.LayoutAnimationController
com.facebook.react.uimanager.layoutanimation.LayoutAnimationListener

Wymagany Node.js 22

React Native 0.84 wymaga Node.js v22.11 lub nowszej. Ta zmiana poprawia dostępność nowoczesnych funkcji JavaScript w ekosystemie narzędzi React Native.

Przed aktualizacją upewnij się, że masz aktualną wersję Node.js. Zalecamy używanie menedżera wersji Node, takiego jak nvm lub fnm, do zarządzania wersjami.

Inne zmiany

React 19.2.3

Ta wersja synchronizuje React 19.2.3 z React Native, włączając najnowsze poprawki i ulepszenia od zespołu React.

Konfiguracja płaska ESLint v9

Konfiguracja ESLint w React Native obsługuje teraz konfigurację płaską ESLint v9, co ułatwia przyjęcie najnowszych narzędzi ESLint w twoim projekcie.

Wsparcie dla platform

  • Formaty obrazów: React Native 0.84 zawiera obsługę dodatkowych formatów obrazów (HEIC i HEIF), co ułatwia pracę z nowoczesnymi wyjściami aparatów i bibliotekami obrazów.

  • PlatformColor: Ulepszone testowanie i wsparcie dla PlatformColor w interpolacjach animowanych i zakresach wyjściowych.

  • Zdarzenia klawiatury na Androidzie: Dodano obsługę onKeyDown/onKeyUp na Androidzie, umożliwiając obsługę zdarzeń klawiatury dla klawiatur sprzętowych i pilotów telewizyjnych.

Dostępność

Komponenty tekstowe z handlerami onPress lub onLongPress otrzymują teraz automatycznie accessibilityRole="link" dla lepszego wsparcia dostępności, zapewniając że czytniki ekranu prawidłowo ogłaszają interaktywne elementy tekstowe.

Na Androidzie wykonano znaczną pracę, aby naprawić problemy ze stanem dostępności w przypadku widoków recyklingowanych — zapewniając że stany isClickable i OnClickListener są prawidłowo resetowane, gdy widoki są recyklingowane, co zapobiega ogłaszaniu przez czytniki ekranu niepoprawnych stanów.

Ulepszenia URL API

Dodano brakujące standardowe właściwości do URL (hash, host, pathname, itp.) i metody do URLSearchParams (get, set, delete, itp.), przybliżając implementację URL w React Native do standardu sieciowego. Naprawiono również problem z duplikującymi się wpisami w URLSearchParams.

Inne zmiany łamiące kompatybilność

iOS

  • Naprawiono rzadki crash EXC_BAD_ACCESS w ImageResponseObserverCoordinator przez opakowanie obserwatorów w wskaźniki zliczające referencje. To zmienia deklaracje obiektów w API obserwatora RCTImage, co może wpłynąć na zależne biblioteki, takie jak react-native-svg.

Android

  • Usunięto BridgeDevSupportManager.

C++

  • JSBigString implementuje teraz jsi::Buffer bezpośrednio. Pośrednictwo BigStringBuffer zostało usunięte (obecnie przestarzałe). Kod, który bezpośrednio dziedziczy po BigStringBuffer lub zależy od niego, może wymagać aktualizacji.

JS

  • Przestarzałe zakładki Perf i Network zostały usunięte z wbudowanego inspektora elementów, ponieważ te funkcje są teraz dostępne w React Native DevTools.

Przeczytaj pełną listę zmian łamiących kompatybilność w dzienniku zmian dla wersji 0.84.

Przestarzałe funkcje

Ta wersja zawiera dwa oznaczenia przestarzałe:

  • Sieć: Interfejsy API XHRInterceptor i WebSocketInterceptor są przestarzałe. Narzędzia deweloperskie powinny zamiast tego używać domeny Network protokołu Chrome DevTools (CDP).

  • TurboModules: TurboModuleProviderFunctionType jest przestarzałe.

Podziękowania

React Native 0.84 zawiera ponad 650 commitów od 95 współtwórców. Dziękujemy za waszą ciężką pracę!

Chcielibyśmy szczególnie podziękować tym, którzy wnieśli znaczący wkład w tę wersję:

  • Riccardo Cipolleschi za domyślne wstępnie skompilowane pliki binarne na iOS i usunięcie starszej architektury na iOS.

  • Rob Hogan za podniesienie wersji Node.js do 22.

  • Fabrizio Cucci za ulepszenia dostępności na Androidzie.

  • @pipopotamasu za wsparcie dla płaskiej konfiguracji ESLint v9.

Aktualizacja do wersji 0.84

informacja

0.84 to obecnie najnowsza stabilna wersja React Native, a wersja 0.81.x przechodzi do stanu nieobsługiwanego. Więcej informacji znajdziesz w polityce wsparcia React Native.

Aktualizacja

Do sprawdzenia zmian kodu między wersjami React Native w istniejących projektach użyj React Native Upgrade Helper, dodatkowo do dokumentacji aktualizacji.

💡 Nowość: Wypróbuj eksperymentalną umiejętność AI upgrade-react-native dla projektów Community CLI.

Tworzenie nowego projektu

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

Expo

W projektach Expo, React Native 0.84 będzie dostępny jako część wydań expo@canary. Następny SDK, SDK 56, zostanie dostarczony z kolejną stabilną wersją React Native: 0.85.