Per sapere quando organizzeremo il prossimo meetup, seguici sui social!
Trovi FerraraJS su:
Grazie a tutti!
SSID: CNA-Esterni
Password: M3r4k117
From Imperative to Declarative
@mattiamanzati
Aprendo la console sviluppatori su Facebook possiamo effettivamente vedere la versione utilizzata
Non solo è adottata da Facebook, ma prima di essere rilasciata una versione stabile, viene testata sull'enorme codebase di Facebook
O meglio, su ES6
Uhm, che cosa mi serve per cominciare?
JAVASCRIPT FATIGUE
npm install -g create-react-app
create-react-app meetup
Risorse statiche
fonts/immagini/video/etc...
Risorse da compilare/minificare
js/css
Informazioni varie sul progetto
Buttiamoci nel codice!
HTML? In un file .JS? WTF
E' un estensione della sintassi JavaScript, ed è altamente raccomandata durante lo sviluppo tramite ReactJS.
JSX utilizza sintassi XML, ed è tradotto in chiamate a funzioni React.createElement
JSX può essere usato per rappresentare il codice HTML che dovremmo renderizzare.
I nomi degli attributi JSX sono i nomi delle proprietà JavaScript. I tag html sono sempre scritti in minuscolo, vedremo successivamente il perchè.
e.g. si usa "className" al posto di "class" e gli eventi sono "onClick" invece di "onclick"
All'interno di JSX è possibile inserire variabili o espressioni JavaScript semplicemente racchiudendole tra parentesi graffe.
Tali espressioni verranno valutate e ritornate.
Il contenuto delle espressioni JavaScript valutate subirà un escape per evitare problemi di sicurezza dovuti a XSS.
Aggiornare il DOM è costoso:
Quando chiamiamo render, React si preoccuperà di effettuare update granulari
React propone un approccio dichiarativo, vedendo la funzione render di un elemento e conoscendone lo stato attuale, possiamo facilmente predirre come verrà renderizzato
Ci permettono di suddividere la nostra UI in unità indipendenti, isolate e riusabili
Il modo più semplice di creare un componente è usando una funzione:
"una funzione che accetta un oggetto come parametro e ritorna un elemento, è considerato un componente valido".
La sintassi alternativa è quella di estendere la classe di base React.Component.
Vedremo successivamente le differenze tra i due approcci.
In questo caso le props sono nell'attributo "props" dell'instanza del componente.
Le props arrivano dal componente "padre", e come tali sono immutabili. Sono i parametri della nostra funzione, e non possono essere variati.
Ritorniamo al nostro timer, e proviamo ad incapsularlo per farlo diventare un componente!
Ora sappiamo come realizzare un componente!
E se volessimo avere più Clock?
...e se ogni componente potesse aggiornarsi in maniera isolata?
Offre la possibilità di incapsulare, assieme ad ogni componente, uno stato locale.
E' possibile dichiarare lo state solo per i componenti che estendono la classe React.Component.
Al variare dello state, il componente renderizzato verrà aggiornato automaticamente.
Yay! Funziona! :D
Ma non si aggiornano! D:
Idealmente, ogni componente dovrebbe avviare un proprio timer interno quando viene usato, e fermarlo quando non è più in uso!
Vengono richiamati quando il componente entra in diverse fasi della sua "vita"
Sono disponibili solamente nei componenti che estendono la classe React.Component
Quando inizializzo il componente, propongo l'ora attuale
quando monto il componente nel DOM, avvio il timer
quando smonto il componente, fermo il timer
ad ogni tick del timer, aggiorno l'ora nello state
Lo state, dopo essere inizializzato nel costruttore, può essere variato solamente utilizzando la funzione setState
Quando il render di un componente dipende solamente dalle sue props, viene chiamato "Pure Component".
In caso il componente sia definito come funzione, può quindi essere definito "Functional Pure Component"