React Native, med eller utan Expo?

Ska du bygga en cross-platform app men är osäker på om du ska använda Expo i ditt React Native projekt?

När man bygger en cross-platform app med React Native finns det två vanliga tillvägagångssätt. Det ena är att köra ett rent React Native-projekt, och det andra är att använda Expo. Här tänkte jag förklara lite om för- och nackdelarna.

Skillnad på projekt med och utan Expo

Styrkan med React Native är att man kan skriva sin app i TypeScript eller JavaScript, vilket sedan kan paketeras till en native app på både iOS och Android, med exakt samma kodbas. All nativekod som krävs (Objective-C eller Swift för iOS, Java eller Kotlin för Android) hanteras av React Native.

Då och då händer det dock att utvecklare behöver skriva egen nativekod, t.ex. för att koppla ett tredjepartsbibliotek som kräver det. I ren React Native så är det inga problem, det är bara att gå in i den genererade nativekoden och lägga till och ändra det som behövs.

Däremot, om ditt projekt använder Expo, så finns inte den möjligheten. Ni har inte tillgång till nativekoden alls.

Varför har man inte tillgång till nativekoden i Expo?

Det är givetvis en styrka att kunna redigera nativekoden, men det finns också en nackdel. Varje gång du ska uppdatera din React Native-version så kommer du behöva uppdatera den genererade nativekoden. Om du har gjort ändringar där så kan det bli omständigt och tidskrävande. Du kan behöva kolla diffar mellan den nuvarande React Native-genererade nativekoden och den nya versionen och manuellt applicera ändringarna för att inte riskera att förlora dina ändringar.

Expo inte tillåter ändringar i nativekoden, så stöter man aldrig på det problemet. Det är därmed fritt fram att uppgradera till senaste React Native utan större bekymmer.

Vad händer om man aldrig uppgraderar React Native?

Även om du skulle vilja hålla kvar vid samma React Native-version för all framtid så finns det vissa risker med att börja redigera nativekoden. Genererad kod kan vara svår att förstå, och då många React Native-utvecklare kommer från webbvärlden, så har man många gånger inte samma förståelse för de kompileringssteg som en native iOS- eller Androidutvecklare kanske har. Det finns risk att man hamnar i kompileringsproblem som kan ta dagar att åtgärda, och som man tycker bara “borde funka”. Svårförklarat för kunder.

Ska man alltid använda Expo tillsammans med React Native?

Ja och nej. Om jag skulle ge en rekommendation så är det att påbörja projektet med Expo och försök in i det sista att använda de inbyggda kopplingar till nativefunktioner som Expo ger dig. Min erfarenhet är att det kommer ta bort oerhört mycket huvudvärk i det långa loppet.

Om du till slut måste “ejecta”, dvs. gå över till ren React Native, se då till att försöka hålla nere på ändringarna i nativekoden samt dokumentera noga varje ändring du gör för att underlätta för framtida utvecklare.

Utgå alltid från att det kommer att finnas andra utvecklare i projektet så småningom, även om du råkar vara den enda utvecklaren just nu. Det underlättar även för dig när du har varit borta från kodbasen i 6 månader och ska försöka fortsätta jobba på den.

Gillar du vad du ser?

Bli uppringd

(Vanligtvis inom en timma)