SlideShare une entreprise Scribd logo
INTRODUCTION À REACT@N1K0
React est une lib frontend JavaScript permettant de construire des
interfaces utilisateurs Web
REACT
▸ Open Source (MIT)
▸ développée par Facebook
▸ MVC
REACT
▸ librairie orientée rendu
▸ concept de composants réutilisables
▸ grand soin apportée à la gestion d'état
▸ très performant grace au concept de diff de DOM
GESTION D'ÉTAT
▸ Les données changeantes au fil du temps sont une plaie
▸ Le DOM n'est qu'une gigantesque state machine
▸ Emprunts à la Programmation Fonctionnelle
EXEMPLE
var Counter = React.createClass({
displayName: "Counter",
getInitialState: function() {
return {value: 0}
},
handleClick: function() {
this.setState({value: this.state.value + 1});
},
render: function() {
return (React.DOM.div(null,
React.DOM.span(null, this.state.value),
React.DOM.a({href: "#", onClick: this.handleClick},
"click me!")));
}
});
React.renderComponent(Counter(), document.querySelector("body"));
EXEMPLE
Restitution HTML :
<div data-reactid=".0">
<span data-reactid=".0.1">0</span>
<a data-reactid=".0.2" href="#">click me!</a>
</div>
DÉCRYPTAGE
Déclaration du composant
var Counter = React.createClass({
displayName: "Counter",
DÉCRYPTAGE
Définition de l'état initial
getInitialState: function() {
return {value: 0}
},
DÉCRYPTAGE
Définition de l'action au click ; ici, on met à jour l'état en incrémentant
la valeur courante du compteur
handleClick: function() {
this.setState({value: this.state.value + 1});
},
React effectue un rendu intégral d'un composant à chaque mise à jour
des données qui lui sont associées
DÉCRYPTAGE
Définition de la structure sémantique du composant
render: function() {
return (React.DOM.div(null,
React.DOM.span(null, this.state.value),
React.DOM.a({href: "#", onClick: this.handleClick},
"click me!")));
}
DÉCRYPTAGE
"Montage" du composant sur un nœud DOM réel
React.renderComponent(Counter(),
document.querySelector("body"));
Un composant React n'est au final qu'une fonction idempotente
pouvant décrire votre UI à un moment précis dans le temps
de façon extrêment fiable
COMME UN
SERVEUR WEB
JSX
/** @jsx React.DOM */
var Counter = React.createClass({
getInitialState: function() {
return {value: 0}
},
handleClick: function() {
this.setState({value: this.state.value + 1});
},
render: function() {
return (
<div>
<span>{this.state.value}</span>
<a onClick={this.handleClick}>increment</a>
</div>
);
}
});
React.renderComponent(<Counter/>, document.querySelector("body"));
Introduction à React
JSX
(oui, ça fait toujours ça la première fois)
▸ JSX n'est qu'un DSL représentant le DOM
▸ nécessite une étape de compilation
▸ son utilisation est complètement optionnelle…
▸ … mais bien pratique à l'usage
PROPRIÉTÉS IMMUTABLES
var Counter = React.createClass({
getInitialState: function() {
return {value: parseInt(this.props.value, 10) || 0}
},
handleClick: function() {
this.setState({value: this.state.value + 1});
},
render: function() {
return (
<div>
<span>{this.state.value}</span>
<a onClick={this.handleClick}>increment</a>
</div>
);
}
});
PROPRIÉTÉS IMMUTABLES
React.renderComponent(<Counter value="42" />,
document.querySelector("body"));
COMPOSABILITÉ
var MultiCounter = React.createClass({
render: function() {
return (
<div>
<Counter value="1" />
<Counter value="2" />
<Counter value="3" />
</div>
);
}
});
COMPOSABILITÉ
var MultiMultiCounter = React.createClass({
render: function() {
return (
<div>
<MultiCounter/>
<MultiCounter/>
<MultiCounter/>
<Counter/>
</div>
);
}
});
DÉCORATEUR
var Panel = React.createClass({
render: function() {
return (
<div className="panel">
<h1>{this.props.title}</h1>
<div className="panel-body">
{this.props.children}
</div>
</div>;
);
}
});
DÉCORATEUR
var MyPanel = React.createClass({
render: function() {
return (
<Panel title="Hello World">
<p>How are you today?</p>
</Panel>
);
}
});
VIRTUAL DOM
À chaque mise à jour des données, React :
▸ construit un nouvel arbre virtuel à partir de celles-ci
▸ fait un diff avec la précédente version de l'arbre
▸ stocke un ensemble d'opérations atomiques de modification dans
une queue
▸ et traite ces opérations par lots (batch)
C'EST SUPER
RAPIDE
Voila. Des questions ?

Contenu connexe

PDF
React-cours.pdf
PPTX
Reactjs
PPTX
Introduction à React JS
PPTX
PPTX
Introduction à React
PDF
Angular.pdf
PDF
Exercices uml-corrige
PDF
Telecharger Exercices corrigés PL/SQL
React-cours.pdf
Reactjs
Introduction à React JS
Introduction à React
Angular.pdf
Exercices uml-corrige
Telecharger Exercices corrigés PL/SQL

Tendances (20)

PDF
Support NodeJS avec TypeScript Express MongoDB
PPTX
Introduction à spring boot
PDF
Architecture jee principe de inversion de controle et injection des dependances
PDF
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
PDF
Support JEE Servlet Jsp MVC M.Youssfi
PDF
Maven et industrialisation du logiciel
PDF
Support de Cours JSF2 Première partie Intégration avec Spring
PDF
Support JEE Spring Inversion de Controle IOC et Spring MVC
PPTX
React JS - A quick introduction tutorial
PDF
Support developpement applications mobiles avec ionic v3 et v4
PPTX
Angular
PDF
Support de cours angular
PDF
Rapport j2ee: Gestion d’un compte bancaire En utilisant les EJB 3.0
PDF
Support de cours technologie et application m.youssfi
PDF
softCours design pattern m youssfi partie 9 creation des objets abstract fact...
PDF
Cours JavaScript
PDF
React redux-tutoriel-1
PDF
Mise en oeuvre des framework de machines et deep learning v1
PDF
Support distributed computing and caching avec hazelcast
Support NodeJS avec TypeScript Express MongoDB
Introduction à spring boot
Architecture jee principe de inversion de controle et injection des dependances
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
Support JEE Servlet Jsp MVC M.Youssfi
Maven et industrialisation du logiciel
Support de Cours JSF2 Première partie Intégration avec Spring
Support JEE Spring Inversion de Controle IOC et Spring MVC
React JS - A quick introduction tutorial
Support developpement applications mobiles avec ionic v3 et v4
Angular
Support de cours angular
Rapport j2ee: Gestion d’un compte bancaire En utilisant les EJB 3.0
Support de cours technologie et application m.youssfi
softCours design pattern m youssfi partie 9 creation des objets abstract fact...
Cours JavaScript
React redux-tutoriel-1
Mise en oeuvre des framework de machines et deep learning v1
Support distributed computing and caching avec hazelcast
Publicité

En vedette (20)

PDF
Feature Teams On Steroids
PDF
Le langage sql
PDF
symfony: Un Framework Open-Source pour les Entreprises (Solutions Linux 2008)
PDF
PPTX
Lean Kanban FR 2013 - Vin et kanban
PDF
SQL Server 2008 'Best Practices' - Stéphane Haby, dbi services - Mövenpick La...
PDF
Què ha fet ICV-EUiA amb el meu vot?
PPTX
Semana 5: Caracteres, tipos char e int, tipos de valor vs. tipos de referência
PDF
ECM-Webinar: Alfresco Migration Bestandsdaten Teil 2
PDF
Otimizando aplicações Zend Framework - Tchelinux
PPTX
NotORM
KEY
Einführung in SCRUM
PDF
02.10.2011 SC B.A.T II
PPT
Apresentação Java Web Si Ufc Quixadá
PPT
MySQL Query Optimization
PDF
Dominator: Rectifieuse plane de profils à CN et avance lente de Jones & Shipman
PPTX
Campus M21 | Medienpraxis II: Online - Vorlesung I vom 30.01.2013
PDF
Atelier agile 2009_09_27
PDF
Campus M21 | Medienpraxis III: Online / Social Media - Vorlesung II
PDF
Ligação do Flex a um backend LAMP usando AMFPHP
Feature Teams On Steroids
Le langage sql
symfony: Un Framework Open-Source pour les Entreprises (Solutions Linux 2008)
Lean Kanban FR 2013 - Vin et kanban
SQL Server 2008 'Best Practices' - Stéphane Haby, dbi services - Mövenpick La...
Què ha fet ICV-EUiA amb el meu vot?
Semana 5: Caracteres, tipos char e int, tipos de valor vs. tipos de referência
ECM-Webinar: Alfresco Migration Bestandsdaten Teil 2
Otimizando aplicações Zend Framework - Tchelinux
NotORM
Einführung in SCRUM
02.10.2011 SC B.A.T II
Apresentação Java Web Si Ufc Quixadá
MySQL Query Optimization
Dominator: Rectifieuse plane de profils à CN et avance lente de Jones & Shipman
Campus M21 | Medienpraxis II: Online - Vorlesung I vom 30.01.2013
Atelier agile 2009_09_27
Campus M21 | Medienpraxis III: Online / Social Media - Vorlesung II
Ligação do Flex a um backend LAMP usando AMFPHP
Publicité

Similaire à Introduction à React (20)

PDF
2016_js_react.pdf
PPTX
react-slides.ppx (2) (1).pptx react presentation basic
PDF
react-fr.pdf
PDF
React redux-tutoriel-1
PDF
react (1)contexte appbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
PPTX
M204-Ch03_ Comprendre les concepts de React JS.pptx
DOCX
Activity
PDF
Chapitre_11-_React-Redux.pdf
PDF
[Devoxx MA 2023] R2DBC = R2D2 + JDBC (enfin presque...)
PPTX
Jboss Seam
ODP
GWT : under the hood
PDF
le Langage de programmation JavaScript.pdf
PPTX
Cours yeoman backbone box2d
KEY
Introduction aux RIA (Rich Internet Applications)
PPT
Asp.Net Futures
PPT
ASP.NET Futures
ODP
Solution Linux 2009 - JavaScript
PPTX
ESTEM_ReactJS_S1.pptx
PPTX
C# 7 - Nouveautés
PPTX
Tableau de bord Yammer sous SharePoint 2013
2016_js_react.pdf
react-slides.ppx (2) (1).pptx react presentation basic
react-fr.pdf
React redux-tutoriel-1
react (1)contexte appbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
M204-Ch03_ Comprendre les concepts de React JS.pptx
Activity
Chapitre_11-_React-Redux.pdf
[Devoxx MA 2023] R2DBC = R2D2 + JDBC (enfin presque...)
Jboss Seam
GWT : under the hood
le Langage de programmation JavaScript.pdf
Cours yeoman backbone box2d
Introduction aux RIA (Rich Internet Applications)
Asp.Net Futures
ASP.NET Futures
Solution Linux 2009 - JavaScript
ESTEM_ReactJS_S1.pptx
C# 7 - Nouveautés
Tableau de bord Yammer sous SharePoint 2013

Dernier (19)

PDF
famille ................................
PPTX
Chapitre7-java------------------ Exception.pptx
PDF
Manuel cswa-simulation (6) (1).pdf..........
PPTX
Logique séquentielle : les fondamentaux
PDF
Visite de chantier – Projet de Polyclinique à Laghouat
PDF
ENSEIGNEMENT/APPRENTISSAGE ET COMPETENCE
PDF
Regles sur la gestion de l’Eclairage public
PPTX
Introduction aux Systèmes temps réel.pptx
PPT
620118449-1-Introduction-de-La-MOCN.pptT
PPTX
mon_expose_de_geophysique_disposotif_de_wener.pptx
PDF
FAQ_FORAGE_EAU_SUNRISE_ENGINEERING_GROUP_SARL2025.pdf
PPTX
mon_expose_de_geophysique_dispositif_de_schlumberger.pptx
PDF
TP L’analyse granulométrique par tamisage
PPT
Présentation de l’Analyse et Concepti SI
PDF
Expansion du Réseau de Gazoducs de Gaz Naturel au Brésil _ Analyse Technique ...
PDF
TP de La Masse Volumique apparente et absolue
PPT
Icc courant de court circuit explication
PDF
Proposition de contenu pouvant résoudre les problèmes détectés à partir des é...
PDF
Arouna Toure - Senior Ingénieur Logiciel Et Chef De Produit
famille ................................
Chapitre7-java------------------ Exception.pptx
Manuel cswa-simulation (6) (1).pdf..........
Logique séquentielle : les fondamentaux
Visite de chantier – Projet de Polyclinique à Laghouat
ENSEIGNEMENT/APPRENTISSAGE ET COMPETENCE
Regles sur la gestion de l’Eclairage public
Introduction aux Systèmes temps réel.pptx
620118449-1-Introduction-de-La-MOCN.pptT
mon_expose_de_geophysique_disposotif_de_wener.pptx
FAQ_FORAGE_EAU_SUNRISE_ENGINEERING_GROUP_SARL2025.pdf
mon_expose_de_geophysique_dispositif_de_schlumberger.pptx
TP L’analyse granulométrique par tamisage
Présentation de l’Analyse et Concepti SI
Expansion du Réseau de Gazoducs de Gaz Naturel au Brésil _ Analyse Technique ...
TP de La Masse Volumique apparente et absolue
Icc courant de court circuit explication
Proposition de contenu pouvant résoudre les problèmes détectés à partir des é...
Arouna Toure - Senior Ingénieur Logiciel Et Chef De Produit

Introduction à React

  • 2. React est une lib frontend JavaScript permettant de construire des interfaces utilisateurs Web
  • 3. REACT ▸ Open Source (MIT) ▸ développée par Facebook ▸ MVC
  • 4. REACT ▸ librairie orientée rendu ▸ concept de composants réutilisables ▸ grand soin apportée à la gestion d'état ▸ très performant grace au concept de diff de DOM
  • 5. GESTION D'ÉTAT ▸ Les données changeantes au fil du temps sont une plaie ▸ Le DOM n'est qu'une gigantesque state machine ▸ Emprunts à la Programmation Fonctionnelle
  • 6. EXEMPLE var Counter = React.createClass({ displayName: "Counter", getInitialState: function() { return {value: 0} }, handleClick: function() { this.setState({value: this.state.value + 1}); }, render: function() { return (React.DOM.div(null, React.DOM.span(null, this.state.value), React.DOM.a({href: "#", onClick: this.handleClick}, "click me!"))); } }); React.renderComponent(Counter(), document.querySelector("body"));
  • 7. EXEMPLE Restitution HTML : <div data-reactid=".0"> <span data-reactid=".0.1">0</span> <a data-reactid=".0.2" href="#">click me!</a> </div>
  • 8. DÉCRYPTAGE Déclaration du composant var Counter = React.createClass({ displayName: "Counter",
  • 9. DÉCRYPTAGE Définition de l'état initial getInitialState: function() { return {value: 0} },
  • 10. DÉCRYPTAGE Définition de l'action au click ; ici, on met à jour l'état en incrémentant la valeur courante du compteur handleClick: function() { this.setState({value: this.state.value + 1}); }, React effectue un rendu intégral d'un composant à chaque mise à jour des données qui lui sont associées
  • 11. DÉCRYPTAGE Définition de la structure sémantique du composant render: function() { return (React.DOM.div(null, React.DOM.span(null, this.state.value), React.DOM.a({href: "#", onClick: this.handleClick}, "click me!"))); }
  • 12. DÉCRYPTAGE "Montage" du composant sur un nœud DOM réel React.renderComponent(Counter(), document.querySelector("body"));
  • 13. Un composant React n'est au final qu'une fonction idempotente pouvant décrire votre UI à un moment précis dans le temps de façon extrêment fiable
  • 15. JSX /** @jsx React.DOM */ var Counter = React.createClass({ getInitialState: function() { return {value: 0} }, handleClick: function() { this.setState({value: this.state.value + 1}); }, render: function() { return ( <div> <span>{this.state.value}</span> <a onClick={this.handleClick}>increment</a> </div> ); } }); React.renderComponent(<Counter/>, document.querySelector("body"));
  • 17. JSX (oui, ça fait toujours ça la première fois) ▸ JSX n'est qu'un DSL représentant le DOM ▸ nécessite une étape de compilation ▸ son utilisation est complètement optionnelle… ▸ … mais bien pratique à l'usage
  • 18. PROPRIÉTÉS IMMUTABLES var Counter = React.createClass({ getInitialState: function() { return {value: parseInt(this.props.value, 10) || 0} }, handleClick: function() { this.setState({value: this.state.value + 1}); }, render: function() { return ( <div> <span>{this.state.value}</span> <a onClick={this.handleClick}>increment</a> </div> ); } });
  • 20. COMPOSABILITÉ var MultiCounter = React.createClass({ render: function() { return ( <div> <Counter value="1" /> <Counter value="2" /> <Counter value="3" /> </div> ); } });
  • 21. COMPOSABILITÉ var MultiMultiCounter = React.createClass({ render: function() { return ( <div> <MultiCounter/> <MultiCounter/> <MultiCounter/> <Counter/> </div> ); } });
  • 22. DÉCORATEUR var Panel = React.createClass({ render: function() { return ( <div className="panel"> <h1>{this.props.title}</h1> <div className="panel-body"> {this.props.children} </div> </div>; ); } });
  • 23. DÉCORATEUR var MyPanel = React.createClass({ render: function() { return ( <Panel title="Hello World"> <p>How are you today?</p> </Panel> ); } });
  • 24. VIRTUAL DOM À chaque mise à jour des données, React : ▸ construit un nouvel arbre virtuel à partir de celles-ci ▸ fait un diff avec la précédente version de l'arbre ▸ stocke un ensemble d'opérations atomiques de modification dans une queue ▸ et traite ces opérations par lots (batch)