Първи впечатления за реагиране: Expo vs. Native

Наскоро направих първия си набег в родния React, докато се опитвах да прехвърля motogo към Android. Motogo е приложение, което позволява на мотоциклетистите да намерят забавни криви пътища, по които да се возят.

Това прави, като обхожда данните от OpenStreetMaps за всеки път във вашия район и изчислява индекса на кривината (благодарение на Адам Франко) и някои други неща, за да намерите най-добрите пътища.

След като влачах краката си за известно време, реших да изградя основен клонинг на Android на приложението. Идеята е в крайна сметка да бъде в състояние напълно да замени нативната версия на iOS, след като се постигне паритет на функциите, и след това просто да работите върху една кодова база.

Първите стъпки бяха малко болезнени. Трябва да се очаква известна болка при започване на всяка нова рамка. Въпреки това, много объркване възникна от двойната система Expo / CRNA & Native на реакцията. React native има две различни среди, в които можете да изграждате и стартирате приложенията си.

Ето моята стъпка да започна с реакцията на местно ниво, може би това е полезно за някой, който го върти.

експонат

Приложенията на Expo са първото нещо, което се съдържа в ръководството „Първи стъпки“ и се създава с помощта на create-react-native-app (a.k.a. CRNA). Expo държи ръката ви малко повече, но има ограничен набор от компоненти, с които можете да работите. Има за цел да започнете по-бързо.

За да използвате Expo, първо трябва да изтеглите приложението им „host“, в което приложението ви ще се изпълнява. Expo има собствен магазин за приложения и начин за разпространение на приложения на вашите приятели и колеги. Можете обаче да създадете независими приложения за съответните магазини за приложения. Една от готините функции е, че можете да изградите приложение за iOS в облака, без да притежавате mac. Понастоящем услугата е маркирана като Beta за iOS платформата.

Expo „хост приложение“

Проектите от Expo също имат различна структура на файловете, най-вече няма папки за iOS или Android, това е 100% javascript. Това означава, че не можете да правите свои собствени конструкции, без да направите нещо, наречено „изхвърляне“.

Native Code a.k.a. изхвърляне

Алтернативата е известна в ръководството „Първи стъпки“ като „Native Code“. Именуването е малко объркващо за мен, тъй като предполага писане на Java или Swift код, което не е така.

Тези проекти са създадени с init-native init и структурата на папките съдържа два реални проекта за iOS и Android, които могат да бъдат изградени с Xcode / Android Studio, ако решите. Или можете да стартирате проектите от командния ред и все пак да се възползвате от някои от кокетните малки неща като горещо презареждане.

Все още пишете всички javascript, но тук имате възможност да отидете и да ровите в родния проект, в случай че трябва да направите нещо по поръчка за една от платформите.

Противно на експо, можете да използвате всеки от многото компоненти с отворен код, които са налични там. Това има смисъл в ретроспекция; Приложенията на Expo се изпълняват в хост приложение и те могат да избутват актуализации независимо от магазина с приложения. Въпреки че това е чисто, това означава също, че пускате код, без да правите нова компилация, така че е невъзможно да вмъкнете нов естествен код в приложението. Това, което се актуализира, е основният JavaScript-код на приложението, който взаимодейства с ограничения (но със сигурност напълно достатъчен за много приложения) набор от компоненти на Expo.

объркване

Иска ми се да използвам "Native" от началото, вместо това изхабих доста време с Expo. Отне ми известно време да разбера, че има два начина да постъпя и какво означават всички тези термини като „изхвърляне“ и „CRNA“.

Изхвърлянето е, когато имате приложение Expo и решите да отидете „Native“. Това е еднократно преобразуване на командния ред, което не можете да обърнете, освен ако върнете кода си от контрола на версиите.

Ако решите да извадите, можете да използвате нещо, наречено ExpoKit, което ще направи всички неща на Expo достъпни като библиотека и няма да ви се налага да ги замествате ръчно с Native компоненти. Или можете да отидете "пълен роден".

Коренният изглед на приложението е компонент на Google Maps. Използвам Google Maps вместо Apple Maps за лекота на стилизиране и последователен вид на двете платформи.

Виждането на вашите актуализации на промените в реално време както на iOS, така и на Android емулатори е доста яко.

Бързо разбрах, че искам да реагирам на родните карти. Това е отворен компонент на картата, снабден с Airbnb и ви позволява да изберете дали да използвате Apple Maps или Google Maps на iOS.

Въпреки това се мъчих да продължа, защото се опитвах да го инсталирам в приложение Expo, което не поддържа тези външни компоненти. Съвет, който би ми спестил много време, е, че всичко, което изисква команда за реакция на собствената връзка, няма да се изпълнява в приложението на Expo. Командата за връзка ще инсталира наскоро инсталирания ви възелен пакет в родните проекти, което е нещо, което може да се случи само с „Native“ проекти.

По-късно разбрах, че Expo има свой компонент Map, базиран на компонента на Airbnb и е много по-лесен за инсталиране. Но все пак ще трябва да се "изхвърля", така че в крайна сметка това нямаше значение.

Защо да отидете Native

  • Процесът на изграждане на iOS на Expo понастоящем се маркира като бета.
  • Харесва ми идеята да имам контрол върху собствените си изгради. Подаването на apk файл, който е изграден дистанционно, ме прави неприятно.
  • Не можете да използвате някой от многото местни компоненти там. Това технически не е добра причина, тъй като можете просто да изчакате, докато възникне необходимостта, и след това да изхвърлите, ако се наложи. Може да се оправи с компонентите на Expo.
  • Може би най-голямото за мен е, че цялото нещо се чувства като добавяне на още един слой на индирекцията и сложността към вече сложен стек. Например MapView на Expo се основава на реактивните карти на Airbnb, което само по себе си е обединение на куп компоненти на Native Maps.

Бих искал Expo да бъде премахнат от местното ръководство за започване на работа, за да не обърка нови пристигащи. Поне той трябва да бъде въведен по по-ясен начин. Например би било по-смислено, ако вместо „create-react-native-app“ е било наречено create-expo-app, така че да добиете интуицията, че използвате рамка, разположена отгоре RN, а не „стандартния“ начин да правиш нещата.

Това е засега, надявам се това да помогне на някого да продължи. Следете за повече публикации в роднина на реакцията.