SlideShare une entreprise Scribd logo
1  sur  52
Télécharger pour lire hors ligne
Matinale React
Présentation
Nicolas Cuillery
Emmanuel Demey
© Copyright Zenika
Programme
8h45 ­ 9h15 : Accueil et Petit Déjeuner
9h15 ­ 10h00 : Principes et philosophie
10h00 ­ 10h30 : Pause
10h30 ­ 11h45 : Utiliser la bonne stack de développement
12h00 : Questions / Réponses
© Copyright Zenika
© Copyright Zenika
React
1
Sommaire
React
Performances
Flux
Mais aussi...
© Copyright Zenika 1 ­ 1
Historique
Librairie créée par Jordan Walke (Facebook) en 2011
Portage JavaScript de  , une extension PHP initialisée en 2009
Open­sourcée en 2013 par Pete Hunt (Instagram)  
"Rethinking best practices" 
XHP
https://www.youtube.com/watch?v=x7cQ3mrcKaY
 
© Copyright Zenika 1 ­ 2
Références
 
   
   
© Copyright Zenika 1 ­ 3
React
Version actuelle : 15.0.2
Site : 
Documentation : 
Sources : 
Activement maintenue par Facebook (et la communauté)
http://facebook.github.io/react/
http://facebook.github.io/react/docs/
http://github.com/facebook/react/
© Copyright Zenika 1 ­ 4
Description
Lots of people use React as the V in MVC.
React est une librairie orientée composant.
React seul ne permet pas de construire une application :
→ Modèle Flux (alternative au MVC)
→ Routeur
→ Librairie AJAX/REST
© Copyright Zenika 1 ­ 5
API
Une des forces de React est de proposer une API simple, concise et cohérente.
→ Courbe d'apprentissage très rapide
API composant
Gestion du cycle de vie (componentWillMount, componentDidUpdate,
etc.)
Etat du composant (this.state, this.props)
Gestion du rendu (méthode render, méthode registerComponent)
http://facebook.github.io/react/docs/component­api.html
© Copyright Zenika 1 ­ 6
Architecture
React est divisé en plusieurs librairies:
React "core" (cycle de vie, composant)
Différentes cibles :
React DOM (rendu spécifique au DOM)
React Native (rendu mobile natif)
React canvas (rendu dans le canvas HTML, librairie tierce)
etc.
© Copyright Zenika 1 ­ 7
Hello World
constHello=React.createClass({
getDefaultProps(){
return{
name:'World'
};
},
render(){
returnReactDOM.createElement('div',null,`Hello${this.props.name}!`);
}
});
© Copyright Zenika 1 ­ 8
Hello World (avec du JSX !)
constHello=React.createClass({
getDefaultProps(){
return{
name:'World'
};
},
render(){
return<div>{this.props.name}</div>;
}
});
© Copyright Zenika 1 ­ 9
Hello World
Rendu du composant :
ReactDOM.render(<Hello/>,document.getElementById('container'));
//ou
ReactDOM.render(<Helloname="Paul"/>,document.getElementById('container'));
Génère le markup suivant :
<div>HelloWorld!</div>
<!--ou-->
<div>HelloPaul!</div>
© Copyright Zenika 1 ­ 10
Programmation React ive
L'état de sortie est uniquement fonction de l'état d'entrée
Etat d'entrée d'un composant :
Propriétés d'initialisation (this.props)
Etat interne (this.state)
Etat de sortie :
Markup HTML (retour de la méthode render)
© Copyright Zenika 1 ­ 11
Programmation React ive
Le re­rendu d'un composant est déclenché uniquement par un changement des
props ou du state
→ Ce paradigme rend aisé le débuggage des composants.
© Copyright Zenika 1 ­ 12
Composant pur
Pour encourager au découpage en composant pur, React propose une déclaration
simplifiée:
constHello=({name='World'})=><div>Hello{name}</div>;
Idéalement, une application est faite de :
Composants purs réalisant uniquement de l'affichage en fonction des props
Composants impurs chargés de constituer les props des composants purs
© Copyright Zenika 1 ­ 13
Ce qu'il faut retenir
→ Une librairie très mature
→ Références nombreuses et solides
→ Une courbe d'apprentissage rapide
© Copyright Zenika 1 ­ 14
Performances
2
Sommaire
React
Performances
Flux
Mais aussi...
© Copyright Zenika 2 ­ 1
Virtual DOM
React ne manipule pas le DOM directement
Virtual DOM sauvegardé en mémoire
Calcul de la différence lors du re­rendu (diff)
Mise à jour optimisée du DOM réel (reconciliation)
© Copyright Zenika 2 ­ 2
Virtual DOM : Exemple
Mise à jour d'une liste d'éléments dans le DOM
Exemple :
Avant
AngularJS
Backbone
Ember
Après
React
AngularJS
Ember
Deux méthodes comparées :
Suppression de l'ancien et ajout du nouveau noeud.
Mise à jour des éléments sans modifier l'arbre DOM (React).
© Copyright Zenika 2 ­ 3
Virtual DOM : Exemple
JSPerf : 
Code :
http://jsperf.com/virtual­dom­optim­demo/2
© Copyright Zenika 2 ­ 4
Virtual DOM : Exemple
© Copyright Zenika 2 ­ 5
Performances - shouldComponentUpdate
Le concept de virtual DOM est performant, mais :
Même s'il n'y a aucun changement à appliquer, la méthode render sera
quand même exécutée.
Rien n'est plus rapide que "pas de travail du tout" !
Solution : méthode shouldComponentUpdate :
Méthode appelée automatiquement par React avant un rendu : cycle de vie
du composant.
Permet d'annuler l'appel à la méthode render.
S'applique à l'arbre du DOM en cascade !
Doit renvoyer true ou false selon si l'élément doit être mis à jour ou non.
© Copyright Zenika 2 ­ 6
Performances - shouldComponentUpdate
Propagation des modifications avec shouldComponentUpdate
© Copyright Zenika 2 ­ 7
Performances - shouldComponentUpdate
Exemple : implémentation par défaut
 
importReactfrom'react';
exportdefaultMyComponentextendsReact.Component{
constructor(props){
super(props);
}
render(){...}
shouldComponentUpdate(nextProps,nextState){
returntrue;
}
}
© Copyright Zenika 2 ­ 8
Performances - shouldComponentUpdate
Exemple : implémentation idéale, fonction render pure
 
importReactfrom'react';
importshallowComparefrom'react-addons-shallow-compare';
exportdefaultMyComponentextendsReact.Component{
constructor(props){
super(props);
}
render(){...}
shouldComponentUpdate(nextProps,nextState){
returnshallowCompare(this,nextProps,nextState);
}
}
© Copyright Zenika 2 ­ 9
Ce qu'il faut retenir
→ Très performant de base
→ API et devtools pour tuner le rendu
© Copyright Zenika 2 ­ 10
Flux
3
Sommaire
React
Performances
Flux
Mais aussi...
© Copyright Zenika 3 ­ 1
Présentation
Architecture pour concevoir des applications.
Pas un framework !
Pas une librairie !
Poussée par Facebook.
https://facebook.github.io/flux
© Copyright Zenika 3 ­ 2
Flux
© Copyright Zenika 3 ­ 3
Actions
Code impératif (fonction) pour réaliser quelque chose:
Data fetching
Soumission de formulaire
Ouverture de modale
Etc.
et soumettre un résultat (payload)
© Copyright Zenika 3 ­ 4
Stores
Contiennent l'état de l'application
Unique source de vérité
→ L'affichage (composants React) ne dépend que de l'état des stores
© Copyright Zenika 3 ­ 5
Architecture Flux
Le modèle Flux est unidirectionel
Rappelle le fonctionnement de React : props → render → markup
→ Debugging aisé
→ Architecture propre
© Copyright Zenika 3 ­ 6
Redux
Pendant longtemps : le paysage des implémentations Flux était très morcelé
Aujourd'hui : Une librairie écrase les autres :
Créée par Dan Abramov
Interprétation simplifiée du modèle Flux
Concise ( ) et extensible100 LoC !
© Copyright Zenika 3 ­ 7
Redux
© Copyright Zenika 3 ­ 8
Différences avec Flux
Pas de dispatcher, mais un reducer
Store unique
Pas de notification aux composants, mais un changement de référence
→ Très peu de "boilerplate"
© Copyright Zenika 3 ­ 9
Ce qu'il faut retenir
→ Un modèle en adéquation avec React
→ Un écosystème (enfin) stable
→ Developer eXperience
© Copyright Zenika 3 ­ 10
Mais aussi...
4
Sommaire
React
Performances
Flux
Mais aussi...
© Copyright Zenika 4 ­ 1
Testabilité
Framework de test créé par la team React: Jest
Auto­mock: tests réellement unitaires avec un minimum de boilerplate
Remplace à lui seul la stack classique :
Karma,
Jasmine / Mocha
PhantomJS
Sinon
Utilise JSDom pour le rendu DOM
© Copyright Zenika 4 ­ 2
Jest
jest.unmock('../CheckboxWithLabel');
importReactfrom'react';
importReactDOMfrom'react-dom';
importTestUtilsfrom'react-addons-test-utils';
importCheckboxWithLabelfrom'../CheckboxWithLabel';
describe('CheckboxWithLabel',()=>{
it('changesthetextafterclick',()=>{
constcheckbox=TestUtils.renderIntoDocument(<CheckboxWithLabellabelOn="On"
labelOff="Off"/>);
constcheckboxNode=ReactDOM.findDOMNode(checkbox);
//Verifythatit'sOffbydefault
expect(checkboxNode.textContent).toEqual('Off');
//SimulateaclickandverifythatitisnowOn
TestUtils.Simulate.change(
TestUtils.findRenderedDOMComponentWithTag(checkbox,'input')
);
expect(checkboxNode.textContent).toEqual('On');
});
}); © Copyright Zenika 4 ­ 3
Isomorphisme
Une raison pour laquelle React a été rapidement adopté pour les sites grand­public.
React est capable de faire du rendu DOM dans une chaîne de caractère:
import{renderToString}from'react-dom/server';
letmarkup=renderToString(<MyRootComponent/>);
Coté client, React s'exécute et compare le markup existant avec celui qu'on veut
afficher
© Copyright Zenika 4 ­ 4
Isomorphisme
Coût non négligeable: il faut savoir générer le même markup coté server et coté
client
→ Un site ne peut pas être 100% isomorphique
→ Transmission de l'état de l'application du server au client (facile grâce à Flux)
conststore=createStore(reducer,initialState)
© Copyright Zenika 4 ­ 5
React Native
Le pari de Facebook: Qu'un développeur React puisse développer des applications
mobiles
render(){
let{movie}=this.props;
return(
<View>
<Text>{movie.title}</Text>
<Text>{movie.year}</Text>
<Imagesource={{uri:movie.posters.thumbnail}}/>
</View>
);
}
© Copyright Zenika 4 ­ 6
React Native
Hier iOS
Aujourd'hui Android
Demain Windows Phone
Learn Once, Run Everywhere
Socle commun (View, Image, Text)
Composant spécifique (ListView, TabBar, Navigator) pour les ergonomies de
chaque plate­forme
© Copyright Zenika 4 ­ 7
React Native
Quelques applications mobiles Facebook utilisent React Native
Migration de l'application principal dans la roadmap
Peu d'exemples externes (Discord)
→ Gros potentiel en terme de code­reuse (iOS vs Android mais également Web vs
Mobile)
© Copyright Zenika 4 ­ 8
React Native
Beaucoup d'efforts pour conserver la même Developer eXperience :
Live Reload
Hot Reload
Debug dans les Chrome Dev Tools
Testabilité
© Copyright Zenika 4 ­ 9
Merci !
© Copyright Zenika 4 ­ 10

Contenu connexe

En vedette

Agile Wake Up #1 du 01/12/2015 : Scrum Master's Diary par Arnaud Villenave
Agile Wake Up #1 du 01/12/2015 : Scrum Master's Diary par Arnaud VillenaveAgile Wake Up #1 du 01/12/2015 : Scrum Master's Diary par Arnaud Villenave
Agile Wake Up #1 du 01/12/2015 : Scrum Master's Diary par Arnaud Villenave
Zenika
 

En vedette (11)

Agile Wake Up #1 du 01/12/2015 : Scrum Master's Diary par Arnaud Villenave
Agile Wake Up #1 du 01/12/2015 : Scrum Master's Diary par Arnaud VillenaveAgile Wake Up #1 du 01/12/2015 : Scrum Master's Diary par Arnaud Villenave
Agile Wake Up #1 du 01/12/2015 : Scrum Master's Diary par Arnaud Villenave
 
Docker du mythe à la réalité
Docker du mythe à la réalitéDocker du mythe à la réalité
Docker du mythe à la réalité
 
HTTP2 : ce qui va changer par Julien Landuré
HTTP2 : ce qui va changer par Julien LanduréHTTP2 : ce qui va changer par Julien Landuré
HTTP2 : ce qui va changer par Julien Landuré
 
NightClazz Java 8 Decouverte
NightClazz Java 8 DecouverteNightClazz Java 8 Decouverte
NightClazz Java 8 Decouverte
 
Datascience & IoT
Datascience & IoTDatascience & IoT
Datascience & IoT
 
Agile Wake Up #3 : la contractualisation Agile
Agile Wake Up #3 : la contractualisation AgileAgile Wake Up #3 : la contractualisation Agile
Agile Wake Up #3 : la contractualisation Agile
 
NightClazz Build Tools & Continuous Delivery Avancé
NightClazz Build Tools & Continuous Delivery AvancéNightClazz Build Tools & Continuous Delivery Avancé
NightClazz Build Tools & Continuous Delivery Avancé
 
Agile Wake Up #3 : Lean UX
Agile Wake Up #3 : Lean UXAgile Wake Up #3 : Lean UX
Agile Wake Up #3 : Lean UX
 
Motivation 3.0 : sens, autonomie et maîtrise.
Motivation 3.0 : sens, autonomie et maîtrise.Motivation 3.0 : sens, autonomie et maîtrise.
Motivation 3.0 : sens, autonomie et maîtrise.
 
Agile Tour 2016 @ Lille
Agile Tour 2016 @ LilleAgile Tour 2016 @ Lille
Agile Tour 2016 @ Lille
 
Agile Wake Up #1 du 01/12/2015 : L'agilité à grande échelle
Agile Wake Up #1 du 01/12/2015 : L'agilité à grande échelleAgile Wake Up #1 du 01/12/2015 : L'agilité à grande échelle
Agile Wake Up #1 du 01/12/2015 : L'agilité à grande échelle
 

Similaire à Matinale React

Référencement, appropriation et usage des outils web 2.0 et réseaux
Référencement, appropriation et usage des outils web 2.0 et réseauxRéférencement, appropriation et usage des outils web 2.0 et réseaux
Référencement, appropriation et usage des outils web 2.0 et réseaux
Lydie Roumeas
 

Similaire à Matinale React (7)

Référencement, appropriation et usage des outils web 2.0 et réseaux
Référencement, appropriation et usage des outils web 2.0 et réseauxRéférencement, appropriation et usage des outils web 2.0 et réseaux
Référencement, appropriation et usage des outils web 2.0 et réseaux
 
J'ai fait une app native en React Native
J'ai fait une app native en React NativeJ'ai fait une app native en React Native
J'ai fait une app native en React Native
 
Web2 Vivaldi Oct2009
Web2 Vivaldi Oct2009Web2 Vivaldi Oct2009
Web2 Vivaldi Oct2009
 
Présentation googlewave g_cavril2010
Présentation googlewave g_cavril2010Présentation googlewave g_cavril2010
Présentation googlewave g_cavril2010
 
Doctorant octobre2014
Doctorant octobre2014Doctorant octobre2014
Doctorant octobre2014
 
Presentation Nec Sept2009
Presentation Nec Sept2009Presentation Nec Sept2009
Presentation Nec Sept2009
 
Labo4de4vtecedit
Labo4de4vteceditLabo4de4vtecedit
Labo4de4vtecedit
 

Plus de Zenika

Terracotta jug
Terracotta jugTerracotta jug
Terracotta jug
Zenika
 

Plus de Zenika (13)

Matinale Agile Wake Up #4 : les tests et l'agilité
Matinale Agile Wake Up #4 : les tests et l'agilitéMatinale Agile Wake Up #4 : les tests et l'agilité
Matinale Agile Wake Up #4 : les tests et l'agilité
 
Agile Wake Up #3 : La transformation Agile de Kisio Digital
Agile Wake Up #3 : La transformation Agile de Kisio DigitalAgile Wake Up #3 : La transformation Agile de Kisio Digital
Agile Wake Up #3 : La transformation Agile de Kisio Digital
 
Entreprise libérée : Du mythe à la réalité ?
Entreprise libérée : Du mythe à la réalité ?Entreprise libérée : Du mythe à la réalité ?
Entreprise libérée : Du mythe à la réalité ?
 
NightClazz Build Tools & Continuous Delivery
NightClazz Build Tools & Continuous DeliveryNightClazz Build Tools & Continuous Delivery
NightClazz Build Tools & Continuous Delivery
 
WTF - What's The Fold - Bordeaux JUG 2013
WTF - What's The Fold - Bordeaux JUG 2013WTF - What's The Fold - Bordeaux JUG 2013
WTF - What's The Fold - Bordeaux JUG 2013
 
Deadlock Victim
Deadlock VictimDeadlock Victim
Deadlock Victim
 
Seren
SerenSeren
Seren
 
What’s Next Replay! Lyon 2011 - G. Darmont
What’s Next Replay! Lyon 2011 - G. DarmontWhat’s Next Replay! Lyon 2011 - G. Darmont
What’s Next Replay! Lyon 2011 - G. Darmont
 
What’s Next Replay! Lyon 2011 - F. Fornaciari
What’s Next Replay! Lyon 2011 - F. FornaciariWhat’s Next Replay! Lyon 2011 - F. Fornaciari
What’s Next Replay! Lyon 2011 - F. Fornaciari
 
What's Next Replay! Lyon 2011 - A. Cogoluegnes
What's Next Replay! Lyon 2011 - A. CogoluegnesWhat's Next Replay! Lyon 2011 - A. Cogoluegnes
What's Next Replay! Lyon 2011 - A. Cogoluegnes
 
Java 7 - Fork/Join
Java 7 - Fork/JoinJava 7 - Fork/Join
Java 7 - Fork/Join
 
Conférence sur les annotations Java par Olivier Croisier (Zenika) au Paris JUG
Conférence sur les annotations Java par Olivier Croisier (Zenika) au Paris JUGConférence sur les annotations Java par Olivier Croisier (Zenika) au Paris JUG
Conférence sur les annotations Java par Olivier Croisier (Zenika) au Paris JUG
 
Terracotta jug
Terracotta jugTerracotta jug
Terracotta jug
 

Dernier (6)

Algo II: les files cours + exercices corrigés
Algo II: les files cours + exercices corrigésAlgo II: les files cours + exercices corrigés
Algo II: les files cours + exercices corrigés
 
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
 
le probleme de la planification JSP exposee (2) (2).pptx
le probleme de la planification JSP exposee (2) (2).pptxle probleme de la planification JSP exposee (2) (2).pptx
le probleme de la planification JSP exposee (2) (2).pptx
 
JTC 2024 Bâtiment et Photovoltaïque.pdf
JTC 2024  Bâtiment et Photovoltaïque.pdfJTC 2024  Bâtiment et Photovoltaïque.pdf
JTC 2024 Bâtiment et Photovoltaïque.pdf
 
pdfcoffee.com_4-production-fond-des-puits-completion-pdf-free.pdf
pdfcoffee.com_4-production-fond-des-puits-completion-pdf-free.pdfpdfcoffee.com_4-production-fond-des-puits-completion-pdf-free.pdf
pdfcoffee.com_4-production-fond-des-puits-completion-pdf-free.pdf
 
mémoire genie civil presenté lors de la soutenance de mémoire
mémoire genie civil presenté lors de la soutenance de mémoiremémoire genie civil presenté lors de la soutenance de mémoire
mémoire genie civil presenté lors de la soutenance de mémoire
 

Matinale React