Aktualizacja Open Source React Native - czerwiec 2019
Ta strona została przetłumaczona przez PageTurner AI (beta). Nie jest oficjalnie zatwierdzona przez projekt. Znalazłeś błąd? Zgłoś problem →
Kod i zdrowie społeczności
W ciągu ostatnich sześciu miesięcy ponad 550 współtwórców wprowadziło łącznie 2800 commitów do React Native. 400 współtwórców ze społeczności utworzyło ponad 1150 Pull Requestów, z których 820 Pull Requestów zostało scalonych.
Średnia dzienna liczba Pull Requestów w ostatnim półroczu wzrosła z trzech do około sześciu, mimo wydzielenia strony, CLI i wielu modułów z React Native w ramach inicjatywy Lean Core. Średnia liczba otwartych pull requestów spadła poniżej 25, a zazwyczaj odpowiadamy z sugestiami i recenzjami w ciągu kilku godzin lub dni.
Znaczące wkłady społeczności
Chcielibyśmy wyróżnić kilka niedawnych wkładów, które uważamy za wyjątkowe:
-
Dostępność: React Native 0.60 zawiera wiele ulepszeń API dostępności na Androida i iOS. Wszystkie nowe funkcje bezpośrednio wykorzystują API platformy bazowej, dzięki czemu integrują się z natywnymi technologiami asystującymi. Dziękujemy Marcowi Mulcahy'emu, Alanowi Kenyonowi, Estevão Lucasowi, Samowi Mathiasowi Weggersenowi i Janicowi Duplessis za ich wkład:
- Dodatkowe role i stany dostępności oraz nowe API stanów dostępności. Dodano brakujące role dostępności dla różnych komponentów i nowe API dla lepszego wsparcia webowego.
- AccessibilityInfo.announceForAccessibility. Dodano wsparcie dla Androida (wcześniej tylko iOS).
- Rozszerzone wsparcie akcji dostępności. Dodano callbacki do obsługi akcji zdefiniowanych przez użytkownika.
- Wsparcie flag dostępności iOS i wsparcie „redukcji ruchu”.
- Ulepszenia dostępności klawiatury na Androidzie. Dodano właściwość
clickablei callbackonClickdo wywoływania akcji przez nawigację klawiszową (uwaga: wkrótce zmiana nazwy nafocusable). - Rysowanie tekstu za pomocą CALayers. Naprawiono problem z zanikaniem przeskalowanego tekstu na iOS.
-
Nowy ekran aplikacji: Społeczność opracowała projekt nowego ekranu aplikacji zaimplementowany w 0.60. To pierwszy ekran widziany przez nowych użytkowników React Native. Teraz kieruje on do dokumentacji, a jego styl pasuje do nadchodzącego redesignu strony 🌟. Ogromne podziękowania dla Orty, Adama Shursona, Glaubera Castro, Karana Singha, Eliego Perkinsa, Lucasa Bento i Erica Lewisa za pracę i współpracę!
- Zobacz nowy ekran aplikacji w serii „React Native Show“.
-
Typy dla TurboModule: Nowy system TurboModules wymaga typów dla wszystkich modułów natywnych aby zagwarantować bezpieczeństwo typów w kodzie natywnym. W niecałe dwa tygodnie społeczność wysłała około 40 Pull Requestów, aby ukończyć tę pracę dla modułów natywnych z typami Flow. Oprócz osób już wymienionych, dziękujemy Michałowi Chudziakowi, Michałowi Pierzchale, Wojtkowi Szafrańcowi, Jeanowi Regisserowi i wszystkim, którzy wysłali przynajmniej jeden Pull Request.
-
Haste: Od 2015 roku React Native używał systemu modułów "haste", który pozwala importować moduły za pomocą globalnego identyfikatora zamiast ścieżki względnej. Jest to wygodne, ale słabo obsługiwane przez wiele narzędzi. James Ide zaproponował usunięcie haste, podobnie jak zrobił to React lata temu. Zaplanował całą pracę w ramach głównego zadania i wysłał 18 Pull Requestów, aby to zrealizować! Więcej szczegółów w jego wątku na Twitterze.
-
Android Fragments: Propozycja Johna Shelleya umożliwiająca działanie React Native przez Android Fragments została scalona i będzie dostępna w wersji 0.61. Więcej o Android Fragments.
Lean Core
Głównym celem Lean Core jest wydzielenie modułów z React Native do osobnych repozytoriów dla lepszej konserwacji. W ciągu pół roku repozytoria takie jak WebView, NetInfo, AsyncStorage, strona dokumentacji i CLI otrzymały łącznie ponad 800 Pull Requestów. Oprócz lepszej konserwacji, projekty te mogą być wydawane niezależnie częściej niż React Native.
Usunęliśmy również przestarzałe polyfille i legacy'owe komponenty. Polyfille były dawniej potrzebne do obsługi funkcji językowych jak Map i Set w starszych wersjach JavaScriptCore (JSC). Obecnie React Native dostarcza nowszą wersję JSC, więc polyfille zostały usunięte.
Prace nadal trwają, ale już widać pierwsze efekty odwrócenia trendu zwiększania rozmiaru aplikacji: rok temu w wersji 0.54 rozmiar pakietu JavaScript React Native wynosił 530kb, a w wersji 0.57 wzrósł do 607kb (+77kb). Obecnie na gałęzi master obserwujemy redukcję o 28kb do 579kb, co daje ponad 100kb różnicy!
Kończąc pierwszą fazę Lean Core, będziemy bardziej świadomie wprowadzać nowe API do React Native, stale optymalizować rozmiar i wydajność, oraz wspierać społeczność w przejmowaniu własności nad komponentami.
Opinie użytkowników
Sześć miesięcy temu zapytaliśmy społeczność: „Co wam się nie podoba w React Native?”, co dało dobry przegląd problemów, z którymi się borykają. Odpowiedzieliśmy na ten post kilka miesięcy temu i teraz czas podsumować postępy w najważniejszych kwestiach:
-
Aktualizacje: Społeczność React Native zjednoczyła siły, wprowadzając wiele usprawnień w procesie aktualizacji: autolinking, lepsze polecenie aktualizacji dzięki rn-diff-purge, strona pomocnicza do aktualizacji (wkrótce). Będziemy też informować o zmianach łamiących kompatybilność i nowych funkcjach poprzez posty na blogu przy każdym głównym wydaniu. Wiele z tych ulepszeń sprawi, że przyszłe aktualizacje poza wersją 0.60 będą znacznie prostsze.
-
Wsparcie/niepewność: Wielu użytkowników było sfrustrowanych brakiem aktywności przy Pull Requestach i ogólną niepewnością co do zaangażowania Facebooka w React Native. Jak pokazaliśmy powyżej, możemy z całą pewnością stwierdzić, że jesteśmy gotowi na więcej Pull Requestów i z niecierpliwością czekamy na wasze propozycje i wkład!
-
Wydajność: React Native 0.59 dostarczył nową, znacznie szybszą wersję JavaScriptCore (JSC). Dodatkowo pracujemy nad domyślnym włączaniem inline-requires i w ciągu najbliższych miesięcy przygotowaliśmy więcej ekscytujących aktualizacji.
-
Dokumentacja: Niedawno rozpoczęliśmy gruntowną przebudowę i przepisanie całej dokumentacji React Native. Jeśli chcesz się przyłączyć, z radością przyjmiemy twoją pomoc!
-
Ostrzeżenia w Xcode: Pozbyliśmy się wszystkich istniejących ostrzeżeń i dokładamy starań, by nie wprowadzać nowych.
-
Hot Reloading: Zespół React pracuje nad nowym systemem hot reloadingu, który wkrótce zostanie zintegrowany z React Native.
Niestety, nie udało nam się jeszcze poprawić wszystkich obszarów:
-
Debugowanie: Naprawiliśmy wiele uciążliwych błędów, z którymi ludzie spotykają się na co dzień, ale niestety nie osiągnęliśmy w tej kwestii tak dużego postępu, jak byśmy chcieli. Zdajemy sobie sprawę, że debugowanie w React Native nie jest idealne i w przyszłości nadamy temu priorytet.
-
Symlinki w Metro: Niestety nie udało nam się jeszcze wdrożyć prostego rozwiązania tego problemu. Jednak użytkownicy React Native udostępnili różne obejścia, które mogą ci pomóc.
Biorąc pod uwagę liczne zmiany z ostatnich sześciu miesięcy, ponownie chcemy zadać wam to samo pytanie. Jeśli używasz najnowszej wersji React Native i masz uwagi, prosimy o komentarze w nowej edycji „Co wam się nie podoba w React Native?”
Ciągła integracja
Facebook scala wszystkie Pull Requesty i wewnętrzne zmiany najpierw do swojego repozytorium, a dopiero potem synchronizuje commity z GitHubem. Infrastruktura Facebooka różni się od popularnych usług CI, więc nie wszystkie testy open source były uruchamiane wewnętrznie. Oznaczało to, że commity synchronizowane z GitHubem często łamały testy w projekcie open source, co zajmowało dużo czasu na naprawę.
Héctor Ramos z zespołu React Native spędził ostatnie dwa miesiące na ulepszaniu systemów ciągłej integracji zarówno w Facebooku, jak i na GitHubie. Większość testów open source jest teraz uruchamianych przed zatwierdzeniem zmian w React Native w Facebooku, co zapewni stabilność CI na GitHubie podczas synchronizacji commitów.
Co dalej
Sprawdź koniecznie nasze prezentacje o przyszłości React Native! W ciągu najbliższych kilku miesięcy członkowie zespołu React Native z Facebooka wystąpią na konferencjach Chain React i React Native EU. Wypatrujcie też naszej kolejnej wersji - 0.60, która jest tuż za rogiem. To będzie ekscytujące ✨