React Native

Le basi

Introduzione



Chi lo usa

Simulatore Android

Sceglierne uno che abbia anche il Play Store



Creare una nuova app
npm install -g expo-cli

Creazione del progetto (crea automaticamente una cartella e chiede il nome dell'app):
 npx create-expo-app --template

Avvio del progetto (da VS Code):
npm start

Clonare un'app esistente
Dopo averla clonata, installare i pacchetti usando il comando:

npm install react-native --force

Core components

View e Text

Non possiamo inserire direttamente il testo in una View... dobbiamo usare il componente apposito:

Button

Style


...ma meglio aggiungerlo al foglio di stile:



Immagini

Scrollview

Esercizio: menù birreria



TextInput

Abbiamo bisogno di una variabile di stato per memorizzare il testo correntemente inserito in TextInput

Creiamo un collegamento bidirezionale tra stato e TextInput:
  • quando viene fatto il render lo stato dice a TextInput quale testo mostrare
  • quando l'utente scrive nella TextInput il testo viene memorizzato nello stato

Usiamo il testo memorizzato nello stato per fare un semplice pizza translator:
Per non tradurre in pizza anche le stringhe vuote usiamo questo and:

parola && '🍕'

FlatList
Per liste lunghe: fa il render solo degli elementi mostrati correntemente nello schermo.
Usiamo { item } perché in realtà a renderItem viene passato un oggetto con ulteriori informazioni, al cui interno è presente item, che è uno degli elementi dell'array dati.


SectionList

Come FlatList, ma divisa in sezioni.




Button


Approfondimento: Touchables

Debugging
console.log()

React DevTools

npm install -g react-devtools
react-devtools

Dal menù sul dispositivo,  Debug RemoteJS (forse non serve: aprendo l'applicazione dopo che è avviato si collega automaticamente)

Platform

Layout

Flexbox
Tutte le View usano flexbox di default.
Se non impostiamo width, di default occupa meno spazio possibile.
justifyContent allinea gli elementi lungo l'asse principale.
alignItem li allinea lungo l'asse trasversale (default: stretch, si allargano tutte all'intera altezza).
flex: 1 (numero di frazioni dell'intera larghezza)




height

flex
Definisce la porzione del main axis da assegnare all'elemento.



flexDirection
Controlla la direzione lungo la quale vengo disposti gli elementi figli.
  • column
  • row
  • column-reverse
  • row-reverse


justifyContent
Descrive come allineare i children lungo l'asse principale.
  • flex-start
  • flex-end
  • center
  • space-between
  • space-around
  • space-evenly

alignItems
Descrive come allineare i children lungo l'asse trasversale
  • stretch: default, allarga fino alla massima estensione lungo l'asse trasversale (a meno che non sia impostata la larghezza)
  • flex-start
  • flex-end
  • center
  • baseline




Immagine di sfondo

Navigazione

Navigator
npx expo install react-native-screens react-native-safe-area-context

npm install @react-navigation/native-stack


Definisco i componenti pagina:


Per navigare posso usare push (aggiunge comunque la nuova pagina allo stack) o navigate (la aggiunge solo se non la abbiamo già aperta).


Passare parametri alle rotte
Configurare l'header
Tab navigation
Drawer navigation

Networking

Fetch

API pubblica del Cinema

Vogliamo interfacciarci all'API pubblica del sito del Cinema don Bosco.

Installiamo questa estensione di Chrome:

Endpoint che restituisce la lista di tutti i film in programmazione:
https://cinema.donboscosandona.it/movie/featured.json

Endpoint che restituisce i dati completi del singolo film:
https://cinema.donboscosandona.it/movie/show/316.json
(nell'esempio passiamo l'id del film 316).


Lettura dei dati da React

Importiamo i componenti necessari:

Carichiamo i dati dei film nel componente Home e mostriamo l'indicatore di caricamento solo fino a quando non sono arrivati tutti. Dopodiché mostriamo la lista dei film:


Approfondimenti:
https://reactnative.dev/docs/network
https://reactnative.dev/docs/activityindicator