Wstęp

Jakiś czas temu zacząłem zapoznawać się z React Nativem, od tego czasu minął prawie miesiąc. Po takim czasie pracy z daną technologią, można już co nie co o niej napisać.

Czym jest React Native?

React Native to nic innego jak narzędzie, które umożliwia tworzyć aplikacje mobilne na telefony, tablety a nawet telewizory za pomocą języka JavaScript. Tego samego którego być może używacie do tworzenia aplikacji internetowych. Native jest również bliźniaczo podobny do Reacta w wersji podstawowej. Różnice są na prawdę nie wielkie, m.in. zamiast znaczników HTML używamy znaczników utworzonych specjalnie na potrzeby frameworku (zamiast <div> używamy <View>, zamiast <span> używamy <Text>).

Style elementów określamy tak, jak byśmy zamiast styli css, używali właściwości javascript. Duża zaletą Nativa jest też to że pisząc w jednym języku mamy już aplikację na dwa systemy, Android i iOS (czasami wymagane są tylko nie wielki zmiany w kodzie aby kod działał na dwóch platformach).

Jeśli chodzi o przepływ danych, to dane płyną w dół tak samo jak w React. Miłośnicy architektury flux nie będą mieli żadnego problemu, by pod projekt podpiąć Reduxa.

Projekt napisany w JavaScript jest kompilowany do Javy(Android) lub Swifta (iOS), więc aplikację bez problemu można nazwać natywną.

Co muszę wiedzieć przed rozpoczęciem projektu?

Skoro wiemy już co nie co o technologi, możemy się w nią bardziej zagłębić. Jeśli chcielibyście rozpocząć pracę z Nativem, musicie wiedzieć że istnieją dwa sposoby na rozpoczęcie przygody: m.in za pomocą create-react-native-app lub react-native. Na początek przedstawię różnice w  aby lepiej zobrazować wam wady i zalety tych dwóch podejść.

create-react-native-app react-native

Zalety:

  • Zawiera narzędzie (Expo), dzięki temu narzędziu nie trzeba instalować emulatora, aplikację można odpalać przez wifi (wystarczy zainstalować Expo na smartfonie, i zeskanować kod QR)
  • Nie trzeba zaglądać w natywny kod, sporo natywnych rozwiązań dostarcza Expo (np. dostęp do kamery, kalendarza, mikrofonu)
  • Aby zbundlować aplikację wystarczy zalogować się do expo i wykonać kilka komend, po czym zostanie wygenerowany link z którego będziemy mogli pobrać naszą aplikację
  • Łatwiejszy start, nie wymaga wielu konfiguracji by zacząć pracę
Zalety:

  • Można dołączać natywne moduły pisane w Javie
  • Większa różnorodność co do dodatkowych bibliotek, które można znaleźć w npm
  • Biblioteki które umożliwią odpalanie funkcji w tle
  • Dokładniejsza geolokalizacja(w rozwiązaniu z Expo dokładność pomiaru wynosiła minimum 10m, natomiast bez Expo nawet 2m)
  • Jeśli nie ma jakiejś funkcjonalności zawsze można ją dopisać w Javie 😉

Wady:

  • Niektóre funkcje nie wspierane np. działanie aplikacji w tle (prace nad tą funkcją in-progress)
  • Duża ilość pakietów npm potrzebuje natywnego kodu, nie jest możliwe odpalenie ich z expo.
  • Brak możliwości pisania modułów w Javie
Wady:

  • Ciężka i czasochłonna konfiguracja emulatora
  • Większość rzeczy trzeba robić manualnie
  • Debugowanie apki na smartfonie tylko po podłączeniu przez USB
  • Jeśli piszemy na Windowsie czy Linuxie, nie będziemy mieli możliwości testować kodu pisanego pod iOS
  • Problemy z uruchamianiem zadań działających w tle

Ogólne spostrzeżenia

React Native to bardzo fajne narzędzie do pisania aplikacji mobilnych, ale czy można w nim zrobić wszystko? Odpowiedź brzmi tak i nie. Jest to zależne od tego czy będziemy chcieli używać Expo czy też nie. Expo nakłada spore ograniczenia co do natywnych funkcji naszych mobilnych urządzeń i nie ze wszystkiego będziemy mogli skorzystać. Natomiast w opcji bez Expo musimy się liczyć z tym, że nie koniecznie do wszystkiego znajdziemy bibliotekę, a jeśli już znajdziemy, to za licencję sporo zapłacimy (przykładem może być biblioteka react-native-background-geolocation której licencja komercyjna na jedną aplikację kosztuje około 300$). Osoby kodujące w Javie nie powinni mieć problemu z edycją czy napisaniem własnych bibliotek.

Pomimo kilku dysfunkcji, React Native jest ciągle rozwijany, i za kilka lat może stać się bezproblemowym narzędziem do budowania aplikacji mobilnych. Jak do tej pory aplikacje koduje się całkiem łatwo i przyjemnie, z warunkiem że są to aplikacje nie wymagające zbyt dużej funkcjonalności od urządzenia.