SlideShare a Scribd company logo
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

More Related Content

PDF
Angular js o React? Spunti e idee per la scelta di un framework
PDF
Enterprise Applications - Angular Day 2018
PDF
Delphi & Dintorni Webinar - Diventa un mago del Testing
PDF
Applicazioni Web ultra-performanti con Vue.js e Delphi
PPTX
ASP.NET MVC: Andare oltre il 100% (Web@work)
PDF
Sviluppo Web con React e Delphi - Seminario Delphi Day 2016, Piacenza
PDF
Mobile Development: una introduzione per Web Developers
PDF
ReactJS for beginners
Angular js o React? Spunti e idee per la scelta di un framework
Enterprise Applications - Angular Day 2018
Delphi & Dintorni Webinar - Diventa un mago del Testing
Applicazioni Web ultra-performanti con Vue.js e Delphi
ASP.NET MVC: Andare oltre il 100% (Web@work)
Sviluppo Web con React e Delphi - Seminario Delphi Day 2016, Piacenza
Mobile Development: una introduzione per Web Developers
ReactJS for beginners

What's hot (10)

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

Viewers also liked (20)

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

Similar to Introduzione a React Native - Alessandro Giannini (20)

PPTX
Introduzione a React Native - Mokapp 2017
PDF
Ionic Cordova vs React Native
PDF
How To React - Gestione Stato Applicativo
PDF
Smau milano 2012 arena social media davide-senatore
PPTX
Impara React sfruttando le tecnologie più recenti (Eduard Capanu).pptx
PDF
PWA e Hybrid App VS Native
PPTX
Sviluppare SPA con Vue.js
PPTX
Come sviluppare applicazioni cross device con HTML
PPTX
Workshop AngularJs, Cordova, Ionic - Politecnico di Milano
PPTX
PhoneGap ovvero lo Sviluppo Mobile Nativo con HTML, CSS e JavaScript
PPTX
Sviluppare applicazioni mobile native in html e java script
PDF
Umarells
PDF
Acadevmy - PWA & Angular
PPTX
Sviluppare SPA con Vue
PPTX
Whymca - Sviluppare applicazioni mobile native in html e javascript
PDF
React js + ES6
PDF
Introduzione a node.js
PDF
Introduzione a Node.js
PDF
Android - Programmazione Avanzata
PDF
React JS + ES6
Introduzione a React Native - Mokapp 2017
Ionic Cordova vs React Native
How To React - Gestione Stato Applicativo
Smau milano 2012 arena social media davide-senatore
Impara React sfruttando le tecnologie più recenti (Eduard Capanu).pptx
PWA e Hybrid App VS Native
Sviluppare SPA con Vue.js
Come sviluppare applicazioni cross device con HTML
Workshop AngularJs, Cordova, Ionic - Politecnico di Milano
PhoneGap ovvero lo Sviluppo Mobile Nativo con HTML, CSS e JavaScript
Sviluppare applicazioni mobile native in html e java script
Umarells
Acadevmy - PWA & Angular
Sviluppare SPA con Vue
Whymca - Sviluppare applicazioni mobile native in html e javascript
React js + ES6
Introduzione a node.js
Introduzione a Node.js
Android - Programmazione Avanzata
React JS + ES6

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