SlideShare une entreprise Scribd logo
1  sur  30
Télécharger pour lire hors ligne
INTRODUZIONE A 

REACT NATIVE
22 FEBBRAIO 2017
• ~4 miliardi di utenti internet (~50% in Asia)
• ~1 miliardo di siti
• Nel 2015 è avvenuto il sorpasso del mobile su desktop
• Volume di dollari globale e-commerce stimato per il 2017: ~2 triliardi e mezzo
• ~50% generato da mobile
• ~90% del tempo mobile si spende sulle app
• Il trend si è consolidato
PERCHE’?
DOVE?
SI MA DOVE?
Android >= 4.1 iOS >= 8
COME?
• App nativa (ovviamente Android e iOS)
• App nativa Android (Java)
• App nativa iOS (Swift / Objective-C)
• App ibride
• Si utilizza un framework
• Una parte nativa (esposta dal framework alla parte cross-platform)
• Un pezzo scritto in un linguaggio comune alle piattaforme target
QUALE IBRIDO?
• HTML5 Hybrid
• Web view che esegue una web app
• Accesso alle API native
• PhoneGap, Cordova, Ionic
• Native Hybrid
• UI nativa
• Logica cross-platform
• Xamarin, Native Script, React Native
REACT-NATIVE
• Mobile framework per la realizzazione di app Android e iOS
• Sviluppato da Facebook e reso opensource su Github nel 2015
• Basato sul paradigma di React (vedremo le basi velocemente)
• OS supportati: Android >= 4.1 e iOS >= 8
• Linguaggio comune: Javascript/JSX
• Parte di Facebook, Facebook ADS, Instagram, Airbnb…
REACT-NATIVE
REACT-NATIVE MODE 1
APP
REACT-NATIVE MODE 2
CHROME APP
PACKAGER AND BUNDLE
CODE
PACKAGER
BUNDLE
REACT-NATIVE MODE 2
DEVICE
PACKAGER
CHROME
CODE
COMPONENTI
• Un’applicazione React Native è strutturata a componenti (grafici)
• Nel caso generale, un’app è un albero di componenti
• Parliamo di componenti React Native
• Ogni componente deve definire un metodo “render” in cui “si disegna”
import React, { Component } from 'react';
import { View, Text } from 'react-native';
export default HomePage extends Component {
render() {
return (
<View>
<Text>Hello Home!</Text>
</View>
);
}
}
FLEXBOX
• Layout mode introdotto in CSS3 (specifica finale del 2012)
• Supportato in tutti i browser (http://caniuse.com/#feat=flexbox)
• Usato in React Native dal giorno zero (con qualche default diverso)
• https://facebook.github.io/react-native/docs/flexbox.html
• https://css-tricks.com/snippets/css/a-guide-to-flexbox
• http://flexboxfroggy.com
STYLESHEET
• Definisce lo stile in modo simile al CSS
• Si usa nello “style” di un componente
const styles = StyleSheet.create({
container: {
flex: 1,
marginTop: 22,
backgroundColor: 'white',
},
titleView: {
padding: 20,
backgroundColor: '#F59C00',
},
...
});
render() {
const composedStyle = [
styles.titleView,
styles.debug,
];
return (
<View style={styles.container}>
<View style={composedStyle}>
...
</View>
</View>
);
}
Si possono definire stili inline
REACT-NATIVE E REACT
• I componenti React Native sono componenti React
• Un’app React Native è basata su React
• E’ necessario conoscere a grandi linee come funziona React
• Virtual DOM
• State
• Props
VIRTUAL DOM
• Il DOM è la struttura dati alla base delle web app
• Manipolare dinamicamente il DOM è un’operazione dispendiosa
• Il re-rendering del DOM ha impatto sulle performance
• Idea: calcoliamo il “delta” dei cambiamenti rispetto al DOM attuale in modo da:
• Minimizzare le operazioni sull’albero
• Massimizzare le prestazioni
• Serve un “Virtual DOM” in base al quale calcolare il “delta”
VIRTUAL DOM
• Il Virtual DOM è alla base di React
• Il metodo “render” di un componente produce un elemento del Virtual DOM
• Semplificando, la radice dell’albero dei componenti produce il Virtual DOM
State Change Diff DOM Update
STATE E PROPS
• Oltre alla “render” ogni componente ha:
• Un set di proprietà read-only, passate dall’esterno: le props
• Uno stato interno read/write: lo state
• La “render” disegna il componente leggendo lo state e le props correnti
• Ogni cambiamento (esterno) di una prop causa il re-rendering del componente
• Ogni cambiamento (interno) dello state causa il re-rendering del componente
STATE E PROPS
import React, { Component } from 'react';
import { View, Text } from 'react-native';
export default HomePage extends Component {
constructor(props) {
super(props);
this.state = { counter: 0 };
}
render() {
const { counter } = this.state;
return (
<View>
<Text onPress={() => this.setState({ counter: counter + 1})}>
Hello {counter}!
</Text>
</View>
);
}
}
RENDER TARGET
• React:
• Input: Virtual DOM
• Render target: Browser DOM
• Rendering: HTML/CSS
• React-Native:
• Input: Virtual DOM
• Render target: UI nativa (device o simulatore)
• Rendering: Android Java SDK o iOS Objective-C/Swift SDK
ESTENSIONI
• Wrapping di API native non ancora supportate
• Wrapping di componenti nativi
• In generale si può comunicare con lo strato nativo tramite un API custom
• Possibilità di avere parte dell’app nativa e parte in React Native
• Migrazione incrementale di un’app da nativo a React Native (es. Facebook)
IN SHORT
• Approccio Native Hybrid che supporta gli OS mobile di interesse: vittoria
• App Android e iOS con stessa grafica e interazione: vittoria
• App Android e iOS con grafica e interazione nativa: vittoria o sconfitta?
• Conoscenza richiesta (best case): poca
• Conoscenza richiesta (worst case): tutto
• Javascript, React e componenti RN
• Android SDK, iOS SDK
• Ecosistema delle piattaforme di interesse
DOVE CERCARE
https://facebook.github.io/react-native/docs
https://github.com/react-native-community
https://github.com/jondot/awesome-react-native
COME SVILUPPARE
• Nessun vincolo sull’ambiente di sviluppo
• vim + terminale
• Visual Studio Code offre un ambiente integrato (con plugin)
• Atom
• Nuclide
• Deco (https://github.com/decosoftware/deco-ide)
RNPLAY.ORG
LINK
• https://github.com/facebook/react-native
• https://github.com/jondot/awesome-react-native
• https://facebook.github.io/react-native/blog/
• https://github.com/develersrl/lilt
• https://www.develer.com/blog/
BANDO ALLE CIANCE
SESSIONE PRATICA
• Semplice lista contatti in React Native per Android e iOS
• https://github.com/develersrl/workshop-introduction-to-react-native
• La sessione sarà divisa in vari step
• Ogni step dovrebbe richiedere più o meno 20 minuti
• Finito il tempo passiamo allo step successivo
• Chi rimane indietro può allinearsi:
• facendo “fast-forward” con git checkout seguito dal nome del branch
• andando a vedere la “soluzione” dello step corrente su github
PER PARTIRE
• Tutti sulla Wifi develer (laptop e device) (password: cammellino987)
• git@github.com:develersrl/workshop-introduction-to-react-native.git
• Sicuramente avrete tutti un cavo per collegare il portatile al cellulare/tablet
• Sicuramente avrete seguito tutti la guida e quindi avete l’hello world di

React Native perfettamente funzionante
• Lanciate il comando:
• react-native run-ios oppure
• react-native run-android

Contenu connexe

Tendances

AngularJs, Bootstrap e Cordova: il connubio per app mobile cross-platform
AngularJs, Bootstrap e Cordova: il connubio per app mobile cross-platformAngularJs, Bootstrap e Cordova: il connubio per app mobile cross-platform
AngularJs, Bootstrap e Cordova: il connubio per app mobile cross-platformGabriele Gaggi
 
REST API fantastiche e dove trovarle
REST API fantastiche e dove trovarleREST API fantastiche e dove trovarle
REST API fantastiche e dove trovarleMarco Breveglieri
 
DrupalDay 2014: AngularJS + IonicFramework + Drupal Services
DrupalDay 2014: AngularJS + IonicFramework + Drupal ServicesDrupalDay 2014: AngularJS + IonicFramework + Drupal Services
DrupalDay 2014: AngularJS + IonicFramework + Drupal ServicesMichel Morelli
 
Creare un Information Radiator con Delphi
Creare un Information Radiator con DelphiCreare un Information Radiator con Delphi
Creare un Information Radiator con DelphiMarco Breveglieri
 
Realizzare applicazioni desktop con Electron e Angular
Realizzare applicazioni desktop con Electron e AngularRealizzare applicazioni desktop con Electron e Angular
Realizzare applicazioni desktop con Electron e AngularMichele Aponte
 
Sviluppo di App cross-platform con Cordova e HTML5
Sviluppo di App cross-platform con Cordova e HTML5Sviluppo di App cross-platform con Cordova e HTML5
Sviluppo di App cross-platform con Cordova e HTML5Gabriele Gaggi
 
Continuous Delivery Database - Diego Mauricio Lagos Morales - Codemotion Rome...
Continuous Delivery Database - Diego Mauricio Lagos Morales - Codemotion Rome...Continuous Delivery Database - Diego Mauricio Lagos Morales - Codemotion Rome...
Continuous Delivery Database - Diego Mauricio Lagos Morales - Codemotion Rome...Codemotion
 

Tendances (10)

AngularJs, Bootstrap e Cordova: il connubio per app mobile cross-platform
AngularJs, Bootstrap e Cordova: il connubio per app mobile cross-platformAngularJs, Bootstrap e Cordova: il connubio per app mobile cross-platform
AngularJs, Bootstrap e Cordova: il connubio per app mobile cross-platform
 
REST API fantastiche e dove trovarle
REST API fantastiche e dove trovarleREST API fantastiche e dove trovarle
REST API fantastiche e dove trovarle
 
DrupalDay 2014: AngularJS + IonicFramework + Drupal Services
DrupalDay 2014: AngularJS + IonicFramework + Drupal ServicesDrupalDay 2014: AngularJS + IonicFramework + Drupal Services
DrupalDay 2014: AngularJS + IonicFramework + Drupal Services
 
Creare un Information Radiator con Delphi
Creare un Information Radiator con DelphiCreare un Information Radiator con Delphi
Creare un Information Radiator con Delphi
 
Angular and beyond
Angular and beyondAngular and beyond
Angular and beyond
 
Making Chatbots
Making ChatbotsMaking Chatbots
Making Chatbots
 
Realizzare applicazioni desktop con Electron e Angular
Realizzare applicazioni desktop con Electron e AngularRealizzare applicazioni desktop con Electron e Angular
Realizzare applicazioni desktop con Electron e Angular
 
Sviluppo di App cross-platform con Cordova e HTML5
Sviluppo di App cross-platform con Cordova e HTML5Sviluppo di App cross-platform con Cordova e HTML5
Sviluppo di App cross-platform con Cordova e HTML5
 
Continuous Delivery Database - Diego Mauricio Lagos Morales - Codemotion Rome...
Continuous Delivery Database - Diego Mauricio Lagos Morales - Codemotion Rome...Continuous Delivery Database - Diego Mauricio Lagos Morales - Codemotion Rome...
Continuous Delivery Database - Diego Mauricio Lagos Morales - Codemotion Rome...
 
Golang Introduzione
Golang IntroduzioneGolang Introduzione
Golang Introduzione
 

En vedette

A tour of React Native
A tour of React NativeA tour of React Native
A tour of React NativeTadeu Zagallo
 
What's This React Native Thing I Keep Hearing About?
What's This React Native Thing I Keep Hearing About?What's This React Native Thing I Keep Hearing About?
What's This React Native Thing I Keep Hearing About?Evan Stone
 
React Native Introduction: Making Real iOS and Android Mobile App By JavaScript
React Native Introduction: Making Real iOS and Android Mobile App By JavaScriptReact Native Introduction: Making Real iOS and Android Mobile App By JavaScript
React Native Introduction: Making Real iOS and Android Mobile App By JavaScriptKobkrit Viriyayudhakorn
 
React native sharing
React native sharingReact native sharing
React native sharingSam Lee
 
Creating books app with react native
Creating books app with react nativeCreating books app with react native
Creating books app with react nativeAli Sa'o
 
[React Native Tutorial] Lecture 6: Component, Props, and Network
[React Native Tutorial] Lecture 6: Component, Props, and Network[React Native Tutorial] Lecture 6: Component, Props, and Network
[React Native Tutorial] Lecture 6: Component, Props, and NetworkKobkrit Viriyayudhakorn
 
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigiReact Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigiYukiya Nakagawa
 
W3CTech美团react专场-React Native 初探
W3CTech美团react专场-React Native 初探W3CTech美团react专场-React Native 初探
W3CTech美团react专场-React Native 初探美团点评技术团队
 
Getting Started with React Native (and should I use it at all?)
Getting Started with React Native (and should I use it at all?)Getting Started with React Native (and should I use it at all?)
Getting Started with React Native (and should I use it at all?)Devin Abbott
 
React Native for Web
React Native for WebReact Native for Web
React Native for WebSam Lee
 
JavaScript, React Native and Performance at react-europe 2016
JavaScript, React Native and Performance at react-europe 2016JavaScript, React Native and Performance at react-europe 2016
JavaScript, React Native and Performance at react-europe 2016Tadeu Zagallo
 
When to (use / not use) React Native.
When to (use / not use) React Native.When to (use / not use) React Native.
When to (use / not use) React Native.Bobby Schultz
 
Introduction to React Native
Introduction to React NativeIntroduction to React Native
Introduction to React NativeRami Sayar
 
React Native in Production
React Native in ProductionReact Native in Production
React Native in ProductionSeokjun Kim
 
React Native Internals
React Native InternalsReact Native Internals
React Native InternalsTadeu Zagallo
 
Quick start with React | DreamLab Academy #2
Quick start with React | DreamLab Academy #2Quick start with React | DreamLab Academy #2
Quick start with React | DreamLab Academy #2DreamLab
 
Introduction to React Native
Introduction to React NativeIntroduction to React Native
Introduction to React NativePolidea
 

En vedette (20)

A tour of React Native
A tour of React NativeA tour of React Native
A tour of React Native
 
What's This React Native Thing I Keep Hearing About?
What's This React Native Thing I Keep Hearing About?What's This React Native Thing I Keep Hearing About?
What's This React Native Thing I Keep Hearing About?
 
React Native Introduction: Making Real iOS and Android Mobile App By JavaScript
React Native Introduction: Making Real iOS and Android Mobile App By JavaScriptReact Native Introduction: Making Real iOS and Android Mobile App By JavaScript
React Native Introduction: Making Real iOS and Android Mobile App By JavaScript
 
React native sharing
React native sharingReact native sharing
React native sharing
 
SONY BBS - React Native
SONY BBS - React NativeSONY BBS - React Native
SONY BBS - React Native
 
Creating books app with react native
Creating books app with react nativeCreating books app with react native
Creating books app with react native
 
[React Native Tutorial] Lecture 6: Component, Props, and Network
[React Native Tutorial] Lecture 6: Component, Props, and Network[React Native Tutorial] Lecture 6: Component, Props, and Network
[React Native Tutorial] Lecture 6: Component, Props, and Network
 
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigiReact Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
 
W3CTech美团react专场-React Native 初探
W3CTech美团react专场-React Native 初探W3CTech美团react专场-React Native 初探
W3CTech美团react专场-React Native 初探
 
Meetup React Native
Meetup React NativeMeetup React Native
Meetup React Native
 
Getting Started with React Native (and should I use it at all?)
Getting Started with React Native (and should I use it at all?)Getting Started with React Native (and should I use it at all?)
Getting Started with React Native (and should I use it at all?)
 
React Native for Web
React Native for WebReact Native for Web
React Native for Web
 
JavaScript, React Native and Performance at react-europe 2016
JavaScript, React Native and Performance at react-europe 2016JavaScript, React Native and Performance at react-europe 2016
JavaScript, React Native and Performance at react-europe 2016
 
When to (use / not use) React Native.
When to (use / not use) React Native.When to (use / not use) React Native.
When to (use / not use) React Native.
 
Introduction to React Native
Introduction to React NativeIntroduction to React Native
Introduction to React Native
 
React Native in Production
React Native in ProductionReact Native in Production
React Native in Production
 
React Native Internals
React Native InternalsReact Native Internals
React Native Internals
 
Quick start with React | DreamLab Academy #2
Quick start with React | DreamLab Academy #2Quick start with React | DreamLab Academy #2
Quick start with React | DreamLab Academy #2
 
Introduction to React Native
Introduction to React NativeIntroduction to React Native
Introduction to React Native
 
React native - What, Why, How?
React native - What, Why, How?React native - What, Why, How?
React native - What, Why, How?
 

Similaire à Introduzione a React Native - Alessandro Giannini

Introduzione a React Native - Mokapp 2017
Introduzione a React Native - Mokapp 2017Introduzione a React Native - Mokapp 2017
Introduzione a React Native - Mokapp 2017Fabrizio Bernabei
 
Smau milano 2012 arena social media davide-senatore
Smau milano 2012   arena social media davide-senatoreSmau milano 2012   arena social media davide-senatore
Smau milano 2012 arena social media davide-senatoreSMAU
 
Dal cloud al mobile con tecnologie Google
Dal cloud al mobile con tecnologie GoogleDal cloud al mobile con tecnologie Google
Dal cloud al mobile con tecnologie GoogleDiego Giorgini
 
Writing apps for android with .net
Writing apps for android with .net Writing apps for android with .net
Writing apps for android with .net Leonardo Alario
 
Costruire applicazioni-cross-platform-con-xamarin-visual-studio-2013
Costruire applicazioni-cross-platform-con-xamarin-visual-studio-2013Costruire applicazioni-cross-platform-con-xamarin-visual-studio-2013
Costruire applicazioni-cross-platform-con-xamarin-visual-studio-2013Luca Zulian
 
Ionic Cordova vs React Native
Ionic Cordova vs React NativeIonic Cordova vs React Native
Ionic Cordova vs React NativeAntonio Gallo
 
Sviluppare Azure Web Apps
Sviluppare Azure Web AppsSviluppare Azure Web Apps
Sviluppare Azure Web AppsAndrea Dottor
 
Le novita di visual studio 2012
Le novita di visual studio 2012Le novita di visual studio 2012
Le novita di visual studio 2012Crismer La Pignola
 
Federico Massi.it - Intro alle app mobile Cordova
Federico Massi.it - Intro alle app mobile CordovaFederico Massi.it - Intro alle app mobile Cordova
Federico Massi.it - Intro alle app mobile CordovaFederico Massi
 
Sviluppo apps multipiattaforma con visual studio e xamarin
Sviluppo apps multipiattaforma con visual studio e xamarinSviluppo apps multipiattaforma con visual studio e xamarin
Sviluppo apps multipiattaforma con visual studio e xamarinFabio Cozzolino
 
01 Android - Introduction
01   Android - Introduction01   Android - Introduction
01 Android - Introductionspawn150
 
Drupal Day 2012 - Applicazioni mobile multipiattaforma integrate con Drupal 7...
Drupal Day 2012 - Applicazioni mobile multipiattaforma integrate con Drupal 7...Drupal Day 2012 - Applicazioni mobile multipiattaforma integrate con Drupal 7...
Drupal Day 2012 - Applicazioni mobile multipiattaforma integrate con Drupal 7...DrupalDay
 
Csp@scuola smarttv corso1
Csp@scuola smarttv corso1Csp@scuola smarttv corso1
Csp@scuola smarttv corso1CSP Scarl
 
Come sviluppare applicazioni cross device con HTML
Come sviluppare applicazioni cross device con HTMLCome sviluppare applicazioni cross device con HTML
Come sviluppare applicazioni cross device con HTMLSinergia Totale
 
Universal app ma universal per davvero
Universal app ma universal per davveroUniversal app ma universal per davvero
Universal app ma universal per davveroKlab
 

Similaire à Introduzione a React Native - Alessandro Giannini (20)

Introduzione a React Native - Mokapp 2017
Introduzione a React Native - Mokapp 2017Introduzione a React Native - Mokapp 2017
Introduzione a React Native - Mokapp 2017
 
Xamarin
XamarinXamarin
Xamarin
 
Smau milano 2012 arena social media davide-senatore
Smau milano 2012   arena social media davide-senatoreSmau milano 2012   arena social media davide-senatore
Smau milano 2012 arena social media davide-senatore
 
Dal cloud al mobile con tecnologie Google
Dal cloud al mobile con tecnologie GoogleDal cloud al mobile con tecnologie Google
Dal cloud al mobile con tecnologie Google
 
Web frameworks
Web frameworksWeb frameworks
Web frameworks
 
Writing apps for android with .net
Writing apps for android with .net Writing apps for android with .net
Writing apps for android with .net
 
Costruire applicazioni-cross-platform-con-xamarin-visual-studio-2013
Costruire applicazioni-cross-platform-con-xamarin-visual-studio-2013Costruire applicazioni-cross-platform-con-xamarin-visual-studio-2013
Costruire applicazioni-cross-platform-con-xamarin-visual-studio-2013
 
Ionic Cordova vs React Native
Ionic Cordova vs React NativeIonic Cordova vs React Native
Ionic Cordova vs React Native
 
INTRO TO XAMARIN
INTRO TO XAMARININTRO TO XAMARIN
INTRO TO XAMARIN
 
Sviluppare Azure Web Apps
Sviluppare Azure Web AppsSviluppare Azure Web Apps
Sviluppare Azure Web Apps
 
Gestire i pdf con iOS
Gestire i pdf con iOSGestire i pdf con iOS
Gestire i pdf con iOS
 
Le novita di visual studio 2012
Le novita di visual studio 2012Le novita di visual studio 2012
Le novita di visual studio 2012
 
VS Package @ CD2008
VS Package @ CD2008VS Package @ CD2008
VS Package @ CD2008
 
Federico Massi.it - Intro alle app mobile Cordova
Federico Massi.it - Intro alle app mobile CordovaFederico Massi.it - Intro alle app mobile Cordova
Federico Massi.it - Intro alle app mobile Cordova
 
Sviluppo apps multipiattaforma con visual studio e xamarin
Sviluppo apps multipiattaforma con visual studio e xamarinSviluppo apps multipiattaforma con visual studio e xamarin
Sviluppo apps multipiattaforma con visual studio e xamarin
 
01 Android - Introduction
01   Android - Introduction01   Android - Introduction
01 Android - Introduction
 
Drupal Day 2012 - Applicazioni mobile multipiattaforma integrate con Drupal 7...
Drupal Day 2012 - Applicazioni mobile multipiattaforma integrate con Drupal 7...Drupal Day 2012 - Applicazioni mobile multipiattaforma integrate con Drupal 7...
Drupal Day 2012 - Applicazioni mobile multipiattaforma integrate con Drupal 7...
 
Csp@scuola smarttv corso1
Csp@scuola smarttv corso1Csp@scuola smarttv corso1
Csp@scuola smarttv corso1
 
Come sviluppare applicazioni cross device con HTML
Come sviluppare applicazioni cross device con HTMLCome sviluppare applicazioni cross device con HTML
Come sviluppare applicazioni cross device con HTML
 
Universal app ma universal per davvero
Universal app ma universal per davveroUniversal app ma universal per davvero
Universal app ma universal per davvero
 

Introduzione a React Native - Alessandro Giannini

  • 1. INTRODUZIONE A REACT NATIVE 22 FEBBRAIO 2017
  • 2. • ~4 miliardi di utenti internet (~50% in Asia) • ~1 miliardo di siti • Nel 2015 è avvenuto il sorpasso del mobile su desktop • Volume di dollari globale e-commerce stimato per il 2017: ~2 triliardi e mezzo • ~50% generato da mobile • ~90% del tempo mobile si spende sulle app • Il trend si è consolidato PERCHE’?
  • 4. SI MA DOVE? Android >= 4.1 iOS >= 8
  • 5. COME? • App nativa (ovviamente Android e iOS) • App nativa Android (Java) • App nativa iOS (Swift / Objective-C) • App ibride • Si utilizza un framework • Una parte nativa (esposta dal framework alla parte cross-platform) • Un pezzo scritto in un linguaggio comune alle piattaforme target
  • 6. QUALE IBRIDO? • HTML5 Hybrid • Web view che esegue una web app • Accesso alle API native • PhoneGap, Cordova, Ionic • Native Hybrid • UI nativa • Logica cross-platform • Xamarin, Native Script, React Native
  • 7. REACT-NATIVE • Mobile framework per la realizzazione di app Android e iOS • Sviluppato da Facebook e reso opensource su Github nel 2015 • Basato sul paradigma di React (vedremo le basi velocemente) • OS supportati: Android >= 4.1 e iOS >= 8 • Linguaggio comune: Javascript/JSX • Parte di Facebook, Facebook ADS, Instagram, Airbnb…
  • 13. COMPONENTI • Un’applicazione React Native è strutturata a componenti (grafici) • Nel caso generale, un’app è un albero di componenti • Parliamo di componenti React Native • Ogni componente deve definire un metodo “render” in cui “si disegna” import React, { Component } from 'react'; import { View, Text } from 'react-native'; export default HomePage extends Component { render() { return ( <View> <Text>Hello Home!</Text> </View> ); } }
  • 14. FLEXBOX • Layout mode introdotto in CSS3 (specifica finale del 2012) • Supportato in tutti i browser (http://caniuse.com/#feat=flexbox) • Usato in React Native dal giorno zero (con qualche default diverso) • https://facebook.github.io/react-native/docs/flexbox.html • https://css-tricks.com/snippets/css/a-guide-to-flexbox • http://flexboxfroggy.com
  • 15. STYLESHEET • Definisce lo stile in modo simile al CSS • Si usa nello “style” di un componente const styles = StyleSheet.create({ container: { flex: 1, marginTop: 22, backgroundColor: 'white', }, titleView: { padding: 20, backgroundColor: '#F59C00', }, ... }); render() { const composedStyle = [ styles.titleView, styles.debug, ]; return ( <View style={styles.container}> <View style={composedStyle}> ... </View> </View> ); } Si possono definire stili inline
  • 16. REACT-NATIVE E REACT • I componenti React Native sono componenti React • Un’app React Native è basata su React • E’ necessario conoscere a grandi linee come funziona React • Virtual DOM • State • Props
  • 17. VIRTUAL DOM • Il DOM è la struttura dati alla base delle web app • Manipolare dinamicamente il DOM è un’operazione dispendiosa • Il re-rendering del DOM ha impatto sulle performance • Idea: calcoliamo il “delta” dei cambiamenti rispetto al DOM attuale in modo da: • Minimizzare le operazioni sull’albero • Massimizzare le prestazioni • Serve un “Virtual DOM” in base al quale calcolare il “delta”
  • 18. VIRTUAL DOM • Il Virtual DOM è alla base di React • Il metodo “render” di un componente produce un elemento del Virtual DOM • Semplificando, la radice dell’albero dei componenti produce il Virtual DOM State Change Diff DOM Update
  • 19. STATE E PROPS • Oltre alla “render” ogni componente ha: • Un set di proprietà read-only, passate dall’esterno: le props • Uno stato interno read/write: lo state • La “render” disegna il componente leggendo lo state e le props correnti • Ogni cambiamento (esterno) di una prop causa il re-rendering del componente • Ogni cambiamento (interno) dello state causa il re-rendering del componente
  • 20. STATE E PROPS import React, { Component } from 'react'; import { View, Text } from 'react-native'; export default HomePage extends Component { constructor(props) { super(props); this.state = { counter: 0 }; } render() { const { counter } = this.state; return ( <View> <Text onPress={() => this.setState({ counter: counter + 1})}> Hello {counter}! </Text> </View> ); } }
  • 21. RENDER TARGET • React: • Input: Virtual DOM • Render target: Browser DOM • Rendering: HTML/CSS • React-Native: • Input: Virtual DOM • Render target: UI nativa (device o simulatore) • Rendering: Android Java SDK o iOS Objective-C/Swift SDK
  • 22. ESTENSIONI • Wrapping di API native non ancora supportate • Wrapping di componenti nativi • In generale si può comunicare con lo strato nativo tramite un API custom • Possibilità di avere parte dell’app nativa e parte in React Native • Migrazione incrementale di un’app da nativo a React Native (es. Facebook)
  • 23. IN SHORT • Approccio Native Hybrid che supporta gli OS mobile di interesse: vittoria • App Android e iOS con stessa grafica e interazione: vittoria • App Android e iOS con grafica e interazione nativa: vittoria o sconfitta? • Conoscenza richiesta (best case): poca • Conoscenza richiesta (worst case): tutto • Javascript, React e componenti RN • Android SDK, iOS SDK • Ecosistema delle piattaforme di interesse
  • 25. COME SVILUPPARE • Nessun vincolo sull’ambiente di sviluppo • vim + terminale • Visual Studio Code offre un ambiente integrato (con plugin) • Atom • Nuclide • Deco (https://github.com/decosoftware/deco-ide)
  • 27. LINK • https://github.com/facebook/react-native • https://github.com/jondot/awesome-react-native • https://facebook.github.io/react-native/blog/ • https://github.com/develersrl/lilt • https://www.develer.com/blog/
  • 29. SESSIONE PRATICA • Semplice lista contatti in React Native per Android e iOS • https://github.com/develersrl/workshop-introduction-to-react-native • La sessione sarà divisa in vari step • Ogni step dovrebbe richiedere più o meno 20 minuti • Finito il tempo passiamo allo step successivo • Chi rimane indietro può allinearsi: • facendo “fast-forward” con git checkout seguito dal nome del branch • andando a vedere la “soluzione” dello step corrente su github
  • 30. PER PARTIRE • Tutti sulla Wifi develer (laptop e device) (password: cammellino987) • git@github.com:develersrl/workshop-introduction-to-react-native.git • Sicuramente avrete tutti un cavo per collegare il portatile al cellulare/tablet • Sicuramente avrete seguito tutti la guida e quindi avete l’hello world di
 React Native perfettamente funzionante • Lanciate il comando: • react-native run-ios oppure • react-native run-android