SlideShare une entreprise Scribd logo
J’ai fait une application native avec React
Native
CocoaHeads Paris Octobre 2016
Danielo JEAN-LOUIS
Développeur Front-end chez DigitasLBi France
React Native
par facebook
Pourquoi React Native ?
- La mise en page sur mobile peut devenir
(rapidement) difficile et problématique
Sources
https://code.facebook.com/posts/1014532261909640/react-native-bringing-modern-web-techniques-to-mobile/
- La mise en page sur mobile peut devenir
(rapidement) difficile et problématique
- Faible productivité des développeurs mobile
chez facebook (notamment lié à la compilation)
Sources
https://code.facebook.com/posts/1014532261909640/react-native-bringing-modern-web-techniques-to-mobile/
Pourquoi React Native ?
Pourquoi React Native ?
- La mise en page sur mobile peut devenir
(rapidement) difficile et problématique
- Faible productivité des développeurs mobile
chez facebook (notamment lié à la compilation)
facebook avait besoin, pour du développement natif, de la vitesse de
développement web
Sources
https://code.facebook.com/posts/1014532261909640/react-native-bringing-modern-web-techniques-to-mobile/
Qu’est-ce que React Native ?
Ça ne fait pas une web app
Ça ne fait pas une application hybride
Sources
https://facebook.github.io/react-native/
https://code.facebook.com/posts/1014532261909640/react-native-bringing-modern-web-techniques-to-mobile/
Qu’est-ce que React Native ?
Ça ne fait pas une web app
Ça ne fait pas une application hybride
Ça fait une application native
Sources
https://facebook.github.io/react-native/
https://code.facebook.com/posts/1014532261909640/react-native-bringing-modern-web-techniques-to-mobile/
Qu’est-ce que React Native ?
Ça ne fait pas une web app
Ça ne fait pas une application hybride
Ça fait une application native
React native utilise le javascript pour la logique et le natif
pour l’interface utilisateur
C’est ReactJS appliqué pour faire une application native
Sources
https://facebook.github.io/react-native/
https://code.facebook.com/posts/1014532261909640/react-native-bringing-modern-web-techniques-to-mobile/
Pour information, ReactJS, c’est :
- Une bibliothèque javascript créée et maintenue par facebook
- ReactJS est disponible depuis 2013
- ReactJS possède 49 050 étoiles sur github (Swift n’a “que”
33 000 étoiles)
React Native permet d’utiliser tout ce que
vous avez appris avec React pour le web,
pour créer une application native pour iOS,
MacOS*, Android et Windows (UWP)*
Sources
https://github.com/ReactWindows/react-native-windows
https://github.com/ptmt/react-native-macos
Learn-once write-anywhere
Le javascript, c’est cool maintenant
- Possibilité de créer de vraies classes
- Le spread opérateur
- Possibilité de scoper les variables (mot-clé let)
- Et plein d’autres choses
Le javascript, c’est cool maintenant
- Possibilité de créer de vraies classes
- Le spread opérateur
- Possibilité de scoper les variables (mot-clé let)
- Et plein d’autres choses
- Et entre-nous, Swift copie un peu l’ecmascript
Que fait React-native ?
- Expose les API Native pour y accéder en javascript
- Par exemple :
	 UIScrollView (iOS) / ScrollView (Android) -> ScrollView (RN)
	 UITableView (iOS) / ListView (Android) -> ListView (RN)
	 UIView (iOS) / View (Android) -> View (RN)
	...
Concurrents de React Native
React native
JS
Oui
React
Oui
Oui
Non
Oui
Langage
Multiple
déploiement
Moteur de
template
Déployable
sur le web
Bridge natif
Utilise une
webview
Mise en page
facile*
NativeScript
JS
Oui
Angular
Oui
Oui
Non
Oui
PhoneGap
HTML/CSS/JS
Oui
Au choix
Oui
Non
Oui
Oui
ionic
HTML/CSS/JS
Oui
Angular
Oui
Non
Oui
Oui
Xamarin
C#
Non
Au choix
Non
Oui
Non
Non
Natif
Obj-C/Swift/
Java
Non
Au choix
Non
Oui
Oui
Non
* Appréciation de l’auteur
Pré-requis
Node js (brew install node)
Watchman (brew install watchman)
react-native-cli (npm install -g react-native-cli)
Sources
https://facebook.github.io/react-native/docs/getting-started.html
Pré-requis
Node js (brew install node)
Watchman (brew install watchman)
react-native-cli (npm install -g react-native-cli)
Ouvrir la console et entrer :
react-native init myProject
cd myProject
react-native run-ios / run-android
Sources
https://facebook.github.io/react-native/docs/getting-started.html
Exemple de projet
index.android.js : Point d’entée Android
index.ios.js : Point d’entée iOS
/ios/ : Un projet xcode
/android/ : Un projet android
package.json : un fichier de dépendances
(comme .podspec/composer.json)
L’application a un point d’entrée propre à l’OS de
destination. Il est possible de faire de même avec des
composants en les suffixant leur fichier par android.js
ou ios.js
Sources
https://facebook.github.io/react-native/docs/platform-specific-code.html
React Native pense composant (comme ReactJS)
React gère uniquement la vue
React ne fournit pas de contrôleur
React ne fournit pas d’écouteur global ou de système de délégation
Le flux de données se veut unidirectionnel. Seul le parent
communique avec son enfant et vice-versa
React, c’est simplement des composants, ils sont le coeur de sa
philosophie
	 Avantages :
		- Réutilisables
		- Testables
		- Maintenables
Les composants sont partout
Pokedex (ListView)
Les composants sont partout
Pokedex (ListView)
PokedexItem (View)
Les composants sont partout
Pokedex (ListView)
PokedexItem (View)
Image (Fourni par RN)
Les composants sont partout
Pokedex (ListView)
PokedexItem (View)
Image (Fourni par RN)
Text (Fourni par RN)
Premier problème des développeurs mobile
de facebook :
Mise en page sur une application native
Flexbox à la rescousse
- React Native se base sur la mise en page flexbox de HTML5 (dans
une version simplifiée)
- React Native utilise le même principe de mise en page de HTML (les
éléments sont empliés par défaut)
- Beaucoup plus simple qu’autolayout / Interface builder /
NSLayoutConstraint
<View>
	 <Text>My text</Text>
</View>
(oui mon texte fait entièrement la largeur de mon conteneur, et ce, sans code supplémentaire. Je rajoute juste flex:1 et je remplis la hauteur)
Sources
https://css-tricks.com/snippets/css/a-guide-to-flexbox/
Deuxième problème des développeurs mobile
de facebook :
Le temps de compilation
Hot reload à la rescousse
Sources
https://facebook.github.io/react-native/blog/2016/03/24/introducing-hot-reloading.html#implementation-in-a-nutshell
https://facebook.github.io/watchman/
Utilisation du Hot Module Replacement (HMR) de Webpack couplé à
watchman pour recharger l’application
Permet le live reload
Sources
https://github.com/DanYellow/ReactNativePokedex/tree/master
Deux façons de communiquer avec le natif
Native Modules : Permet d’accéder aux API native ou une vue
native qui n’a pas besoin d’être consciente de React.
ex : EventKit ou UNNotificationRequest
Native UI Components : Permet de définir une vue native en tant
que composant React
Logs / Debug
- L’application console de MacOS
- La commande : react-native log-ios / log-android
- La console de Xcode / Android studio
- L’application elle-même (nécessite un debug scheme)
- La console du navigateur Chrome
Sources
https://facebook.github.io/react-native/docs/debugging.html
Démo
Mon avis sur React Native
- Superbe transfomation de ReactJS pour l’environnement mobile
- Excellente option pour du prototypage
- Plaisir de développement ; facebook a développé un outil de qualité
- Peut s’avérer inutile si on ne vise qu’iOS et qu’on connait
ComponentKit
- Nécessité d’utiliser des plugins pour des fonctionnalités basiques
(orientation de l’appareil, version du système)
- Enfin possible de faire de la mise en page sur mobile facilement
Merci
Questions ?
For further
https://github.com/jondot/awesome-react-native
http://browniefed.com/blog/react-native-layout-examples/
https://js.coach/react-native
https://rnplay.org/
https://github.com/facebook/react-native/tree/master/Examples/

Contenu connexe

PDF
rapport de stage de découverte
PPTX
Presentation PFE Inetum Tunisie
PPTX
Dart and Flutter Basics.pptx
PDF
PFE MASTER en Développement d’une Application E-commerce avec la Technologie ...
PDF
Guide Unity 3D pdf
PDF
Introduction à React
PPTX
Présentation Git & GitHub
PDF
Rapport pfe Conceptionet Developpement d'une Application web et Mobile
rapport de stage de découverte
Presentation PFE Inetum Tunisie
Dart and Flutter Basics.pptx
PFE MASTER en Développement d’une Application E-commerce avec la Technologie ...
Guide Unity 3D pdf
Introduction à React
Présentation Git & GitHub
Rapport pfe Conceptionet Developpement d'une Application web et Mobile

Tendances (20)

PDF
Rapport pfe
PDF
Étude et mise en place d'un serveur messengerie
PDF
Support developpement applications mobiles avec ionic v3 et v4
PPT
Implentation d'une solution Cloud IAAS
PDF
AUTOMATISATION DU DEPLOIEMENT ET DE LA GESTION DES RESEAUX VIRTUELS DANS LE C...
PDF
Node.js Express Tutorial | Node.js Tutorial For Beginners | Node.js + Expres...
PDF
SDN OpenDaylight
PDF
Introduction to React JS
PDF
Support NodeJS avec TypeScript Express MongoDB
PDF
Rapport PFE 2011 Zimbra
PDF
Alphorm.com Support de la Formation VMware vSphere 6, Les machines virtuelles
PPTX
Flutter presentation.pptx
PDF
Rapport du Projet de Fin d'année Génie informatique
PDF
Rapport pfe talan_2018_donia_hammami
PPTX
Entreprise Java Beans (EJB)
PPTX
DART.pptx
PDF
Cours - Supervision SysRes et Présentation de Nagios
DOCX
MEMOIRE DE STAGE
PDF
Support de Cours JSF2 Première partie Intégration avec Spring
PDF
Architecture microservices avec docker
Rapport pfe
Étude et mise en place d'un serveur messengerie
Support developpement applications mobiles avec ionic v3 et v4
Implentation d'une solution Cloud IAAS
AUTOMATISATION DU DEPLOIEMENT ET DE LA GESTION DES RESEAUX VIRTUELS DANS LE C...
Node.js Express Tutorial | Node.js Tutorial For Beginners | Node.js + Expres...
SDN OpenDaylight
Introduction to React JS
Support NodeJS avec TypeScript Express MongoDB
Rapport PFE 2011 Zimbra
Alphorm.com Support de la Formation VMware vSphere 6, Les machines virtuelles
Flutter presentation.pptx
Rapport du Projet de Fin d'année Génie informatique
Rapport pfe talan_2018_donia_hammami
Entreprise Java Beans (EJB)
DART.pptx
Cours - Supervision SysRes et Présentation de Nagios
MEMOIRE DE STAGE
Support de Cours JSF2 Première partie Intégration avec Spring
Architecture microservices avec docker
Publicité

En vedette (20)

PDF
Rebranding an ios application
PDF
Introduction to WebRTC on iOS
PDF
Safari app extensions cleared up by Sanaa Squalli
PDF
Firebase par nicolas lehovetzki
PDF
Un retour d'expérience sur Apple Pay
PDF
Tout savoir pour devenir Freelance
PDF
Super combinators
PDF
Monads in Swift
PDF
Découvrir dtrace en ligne de commande.
PDF
CONTINUOUS DELIVERY WITH FASTLANE
PDF
Programme MFI retour d'expérience
PDF
How to communicate with Smart things?
PDF
Handle the error
PDF
SwiftyGPIO
PDF
What's new in iOS9
PDF
Présentation de HomeKit
PDF
PDF
MVC-RS par Grégoire Lhotelier
PDF
Chainable datasource
PDF
Design like a developer
Rebranding an ios application
Introduction to WebRTC on iOS
Safari app extensions cleared up by Sanaa Squalli
Firebase par nicolas lehovetzki
Un retour d'expérience sur Apple Pay
Tout savoir pour devenir Freelance
Super combinators
Monads in Swift
Découvrir dtrace en ligne de commande.
CONTINUOUS DELIVERY WITH FASTLANE
Programme MFI retour d'expérience
How to communicate with Smart things?
Handle the error
SwiftyGPIO
What's new in iOS9
Présentation de HomeKit
MVC-RS par Grégoire Lhotelier
Chainable datasource
Design like a developer
Publicité

Similaire à J'ai fait une app native en React Native (20)

PPTX
M204-Ch03_ Comprendre les concepts de React JS.pptx
PPTX
PDF
JCertif Tunisie 2015 - Le Web sur Mobile, Faisons le point !
PPT
Gtug2 Mobile app with web technlogy
PDF
Gwt présentation-jug-14avr2011
PDF
Présentation GWT au JUG Montréal 14 avril 2011
PPTX
Wygday 2011 - Introduction à HTML5
PDF
Cours cordova & REST
PPTX
Développez dans le futur, dès maintenant !
PPTX
Développez dans le futur, dès maintenant !
DOC
CV REBAI Hamida
PDF
Faire des applications web avec Delphi
PPTX
20180628 skill value_masterclass_reactnative - v1.3
PDF
Construire une PWA connectée à WordPress
PPTX
Le développement mobile multiplateforme avec cordova
PPTX
JavaScript Open Day - Migration Web To App
PPTX
Construire une Application Mobile en 30 minutes avec le plugin WP-AppKit
PDF
Webdesign sites web et mobiles-tendances 2015
PDF
Native script
PPTX
Demarrer ionic en 5 etape
M204-Ch03_ Comprendre les concepts de React JS.pptx
JCertif Tunisie 2015 - Le Web sur Mobile, Faisons le point !
Gtug2 Mobile app with web technlogy
Gwt présentation-jug-14avr2011
Présentation GWT au JUG Montréal 14 avril 2011
Wygday 2011 - Introduction à HTML5
Cours cordova & REST
Développez dans le futur, dès maintenant !
Développez dans le futur, dès maintenant !
CV REBAI Hamida
Faire des applications web avec Delphi
20180628 skill value_masterclass_reactnative - v1.3
Construire une PWA connectée à WordPress
Le développement mobile multiplateforme avec cordova
JavaScript Open Day - Migration Web To App
Construire une Application Mobile en 30 minutes avec le plugin WP-AppKit
Webdesign sites web et mobiles-tendances 2015
Native script
Demarrer ionic en 5 etape

Plus de CocoaHeads France (15)

PDF
Mutation testing for a safer Future
PDF
iOS App Group for Debugging
PDF
Asynchronous swift
PDF
Visual accessibility in iOS11
PDF
My script - One year of CocoaHeads
PDF
Ui testing dealing with push notifications
PDF
L'intégration continue avec Bitrise
PDF
Quoi de neuf dans iOS 10.3
PDF
IoT Best practices
PDF
Build a lego app with CocoaPods
PDF
Let's migrate to Swift 3.0
PDF
Project Entourage
PDF
BitTorrent on iOS
PDF
CloudKit as a backend
PDF
Comment faire de HLS votre solution vidéo préférée ?
Mutation testing for a safer Future
iOS App Group for Debugging
Asynchronous swift
Visual accessibility in iOS11
My script - One year of CocoaHeads
Ui testing dealing with push notifications
L'intégration continue avec Bitrise
Quoi de neuf dans iOS 10.3
IoT Best practices
Build a lego app with CocoaPods
Let's migrate to Swift 3.0
Project Entourage
BitTorrent on iOS
CloudKit as a backend
Comment faire de HLS votre solution vidéo préférée ?

J'ai fait une app native en React Native

  • 1. J’ai fait une application native avec React Native CocoaHeads Paris Octobre 2016
  • 4. Pourquoi React Native ? - La mise en page sur mobile peut devenir (rapidement) difficile et problématique Sources https://code.facebook.com/posts/1014532261909640/react-native-bringing-modern-web-techniques-to-mobile/
  • 5. - La mise en page sur mobile peut devenir (rapidement) difficile et problématique - Faible productivité des développeurs mobile chez facebook (notamment lié à la compilation) Sources https://code.facebook.com/posts/1014532261909640/react-native-bringing-modern-web-techniques-to-mobile/ Pourquoi React Native ?
  • 6. Pourquoi React Native ? - La mise en page sur mobile peut devenir (rapidement) difficile et problématique - Faible productivité des développeurs mobile chez facebook (notamment lié à la compilation) facebook avait besoin, pour du développement natif, de la vitesse de développement web Sources https://code.facebook.com/posts/1014532261909640/react-native-bringing-modern-web-techniques-to-mobile/
  • 7. Qu’est-ce que React Native ? Ça ne fait pas une web app Ça ne fait pas une application hybride Sources https://facebook.github.io/react-native/ https://code.facebook.com/posts/1014532261909640/react-native-bringing-modern-web-techniques-to-mobile/
  • 8. Qu’est-ce que React Native ? Ça ne fait pas une web app Ça ne fait pas une application hybride Ça fait une application native Sources https://facebook.github.io/react-native/ https://code.facebook.com/posts/1014532261909640/react-native-bringing-modern-web-techniques-to-mobile/
  • 9. Qu’est-ce que React Native ? Ça ne fait pas une web app Ça ne fait pas une application hybride Ça fait une application native React native utilise le javascript pour la logique et le natif pour l’interface utilisateur C’est ReactJS appliqué pour faire une application native Sources https://facebook.github.io/react-native/ https://code.facebook.com/posts/1014532261909640/react-native-bringing-modern-web-techniques-to-mobile/
  • 10. Pour information, ReactJS, c’est : - Une bibliothèque javascript créée et maintenue par facebook - ReactJS est disponible depuis 2013 - ReactJS possède 49 050 étoiles sur github (Swift n’a “que” 33 000 étoiles)
  • 11. React Native permet d’utiliser tout ce que vous avez appris avec React pour le web, pour créer une application native pour iOS, MacOS*, Android et Windows (UWP)* Sources https://github.com/ReactWindows/react-native-windows https://github.com/ptmt/react-native-macos
  • 13. Le javascript, c’est cool maintenant - Possibilité de créer de vraies classes - Le spread opérateur - Possibilité de scoper les variables (mot-clé let) - Et plein d’autres choses
  • 14. Le javascript, c’est cool maintenant - Possibilité de créer de vraies classes - Le spread opérateur - Possibilité de scoper les variables (mot-clé let) - Et plein d’autres choses - Et entre-nous, Swift copie un peu l’ecmascript
  • 15. Que fait React-native ? - Expose les API Native pour y accéder en javascript - Par exemple : UIScrollView (iOS) / ScrollView (Android) -> ScrollView (RN) UITableView (iOS) / ListView (Android) -> ListView (RN) UIView (iOS) / View (Android) -> View (RN) ...
  • 16. Concurrents de React Native React native JS Oui React Oui Oui Non Oui Langage Multiple déploiement Moteur de template Déployable sur le web Bridge natif Utilise une webview Mise en page facile* NativeScript JS Oui Angular Oui Oui Non Oui PhoneGap HTML/CSS/JS Oui Au choix Oui Non Oui Oui ionic HTML/CSS/JS Oui Angular Oui Non Oui Oui Xamarin C# Non Au choix Non Oui Non Non Natif Obj-C/Swift/ Java Non Au choix Non Oui Oui Non * Appréciation de l’auteur
  • 17. Pré-requis Node js (brew install node) Watchman (brew install watchman) react-native-cli (npm install -g react-native-cli) Sources https://facebook.github.io/react-native/docs/getting-started.html
  • 18. Pré-requis Node js (brew install node) Watchman (brew install watchman) react-native-cli (npm install -g react-native-cli) Ouvrir la console et entrer : react-native init myProject cd myProject react-native run-ios / run-android Sources https://facebook.github.io/react-native/docs/getting-started.html
  • 19. Exemple de projet index.android.js : Point d’entée Android index.ios.js : Point d’entée iOS /ios/ : Un projet xcode /android/ : Un projet android package.json : un fichier de dépendances (comme .podspec/composer.json) L’application a un point d’entrée propre à l’OS de destination. Il est possible de faire de même avec des composants en les suffixant leur fichier par android.js ou ios.js Sources https://facebook.github.io/react-native/docs/platform-specific-code.html
  • 20. React Native pense composant (comme ReactJS) React gère uniquement la vue React ne fournit pas de contrôleur React ne fournit pas d’écouteur global ou de système de délégation Le flux de données se veut unidirectionnel. Seul le parent communique avec son enfant et vice-versa React, c’est simplement des composants, ils sont le coeur de sa philosophie Avantages : - Réutilisables - Testables - Maintenables
  • 21. Les composants sont partout Pokedex (ListView)
  • 22. Les composants sont partout Pokedex (ListView) PokedexItem (View)
  • 23. Les composants sont partout Pokedex (ListView) PokedexItem (View) Image (Fourni par RN)
  • 24. Les composants sont partout Pokedex (ListView) PokedexItem (View) Image (Fourni par RN) Text (Fourni par RN)
  • 25. Premier problème des développeurs mobile de facebook : Mise en page sur une application native
  • 26. Flexbox à la rescousse - React Native se base sur la mise en page flexbox de HTML5 (dans une version simplifiée) - React Native utilise le même principe de mise en page de HTML (les éléments sont empliés par défaut) - Beaucoup plus simple qu’autolayout / Interface builder / NSLayoutConstraint <View> <Text>My text</Text> </View> (oui mon texte fait entièrement la largeur de mon conteneur, et ce, sans code supplémentaire. Je rajoute juste flex:1 et je remplis la hauteur) Sources https://css-tricks.com/snippets/css/a-guide-to-flexbox/
  • 27. Deuxième problème des développeurs mobile de facebook : Le temps de compilation
  • 28. Hot reload à la rescousse Sources https://facebook.github.io/react-native/blog/2016/03/24/introducing-hot-reloading.html#implementation-in-a-nutshell https://facebook.github.io/watchman/ Utilisation du Hot Module Replacement (HMR) de Webpack couplé à watchman pour recharger l’application Permet le live reload
  • 29. Sources https://github.com/DanYellow/ReactNativePokedex/tree/master Deux façons de communiquer avec le natif Native Modules : Permet d’accéder aux API native ou une vue native qui n’a pas besoin d’être consciente de React. ex : EventKit ou UNNotificationRequest Native UI Components : Permet de définir une vue native en tant que composant React
  • 30. Logs / Debug - L’application console de MacOS - La commande : react-native log-ios / log-android - La console de Xcode / Android studio - L’application elle-même (nécessite un debug scheme) - La console du navigateur Chrome Sources https://facebook.github.io/react-native/docs/debugging.html
  • 31. Démo
  • 32. Mon avis sur React Native - Superbe transfomation de ReactJS pour l’environnement mobile - Excellente option pour du prototypage - Plaisir de développement ; facebook a développé un outil de qualité - Peut s’avérer inutile si on ne vise qu’iOS et qu’on connait ComponentKit - Nécessité d’utiliser des plugins pour des fonctionnalités basiques (orientation de l’appareil, version du système) - Enfin possible de faire de la mise en page sur mobile facilement