Il divario tra web e mobile nativo
Nel 2015 lo sviluppo mobile si divide in due mondi separati: iOS richiede Objective-C e l’ecosistema Xcode, Android richiede Java e Android Studio. Ogni piattaforma ha le proprie API, i propri pattern e il proprio ciclo di rilascio. Mantenere due codebase distinte per la stessa applicazione moltiplica i costi di sviluppo e introduce divergenze funzionali inevitabili. Le soluzioni ibride basate su WebView — come Cordova e PhoneGap — eseguono codice web all’interno di un browser incorporato, ma il risultato non raggiunge le prestazioni e la fluidità delle interfacce native.
Facebook affronta il problema con un approccio diverso: applicare il paradigma dichiarativo di React allo sviluppo mobile, ma traducendo i componenti in widget nativi reali anziché renderizzarli in una WebView.
Componenti JavaScript, widget nativi
React Native permette di scrivere componenti in JavaScript utilizzando la stessa sintassi dichiarativa di React per il web. La differenza fondamentale è nel rendering: un componente <View> non produce un <div> HTML, ma una UIView su iOS e una android.view.View su Android. Un componente <Text> produce un’etichetta nativa, un <ScrollView> produce lo scroll nativo della piattaforma.
Lo sviluppatore lavora con un unico linguaggio e un unico modello mentale, ma l’interfaccia risultante utilizza i controlli nativi del sistema operativo. Le animazioni, il feedback tattile, la navigazione tra schermate — tutto avviene a livello nativo, non in un browser.
Il bridge asincrono
L’architettura di React Native si basa su un bridge che collega due mondi separati: il thread JavaScript, dove risiede la logica applicativa, e il thread nativo, dove avviene il rendering. I due thread comunicano in modo asincrono attraverso messaggi serializzati in JSON: JavaScript invia descrizioni delle modifiche all’interfaccia, il lato nativo le applica. Questa separazione garantisce che il thread di rendering non venga mai bloccato da calcoli JavaScript pesanti.
Hot reload e condivisione del codice
Una delle caratteristiche più apprezzate dagli sviluppatori è l’hot reload: modificando il codice JavaScript, le modifiche appaiono immediatamente nell’applicazione in esecuzione senza perdere lo stato corrente. Questo riduce drasticamente il ciclo di feedback rispetto alla compilazione nativa tradizionale, che su progetti complessi richiede minuti.
React Native consente inoltre di condividere porzioni significative di codice tra le versioni iOS e Android — logica di business, gestione dello stato, chiamate di rete — mantenendo la possibilità di accedere direttamente alle API native della piattaforma quando necessario, attraverso moduli scritti in Objective-C o Java.
Link: reactnative.dev
