SlideShare une entreprise Scribd logo
1  sur  26
Télécharger pour lire hors ligne
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"));
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

Tendances

Tendances (20)

React + Redux Introduction
React + Redux IntroductionReact + Redux Introduction
React + Redux Introduction
 
Alphorm.com Formation React : Les fondamentaux
Alphorm.com Formation React : Les fondamentauxAlphorm.com Formation React : Les fondamentaux
Alphorm.com Formation React : Les fondamentaux
 
ReactJS presentation
ReactJS presentationReactJS presentation
ReactJS presentation
 
Introduction to react_js
Introduction to react_jsIntroduction to react_js
Introduction to react_js
 
Intro to React
Intro to ReactIntro to React
Intro to React
 
Its time to React.js
Its time to React.jsIts time to React.js
Its time to React.js
 
React workshop presentation
React workshop presentationReact workshop presentation
React workshop presentation
 
Workshop 21: React Router
Workshop 21: React RouterWorkshop 21: React Router
Workshop 21: React Router
 
A Brief Introduction to React.js
A Brief Introduction to React.jsA Brief Introduction to React.js
A Brief Introduction to React.js
 
Redux workshop
Redux workshopRedux workshop
Redux workshop
 
React web development
React web developmentReact web development
React web development
 
Introduction to Redux
Introduction to ReduxIntroduction to Redux
Introduction to Redux
 
Introduction à spring boot
Introduction à spring bootIntroduction à spring boot
Introduction à spring boot
 
Support NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDBSupport NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDB
 
Cours JavaScript
Cours JavaScriptCours JavaScript
Cours JavaScript
 
React Js Simplified
React Js SimplifiedReact Js Simplified
React Js Simplified
 
reactJS
reactJSreactJS
reactJS
 
Support de cours technologie et application m.youssfi
Support de cours technologie et application m.youssfiSupport de cours technologie et application m.youssfi
Support de cours technologie et application m.youssfi
 
React hooks
React hooksReact hooks
React hooks
 
React js
React jsReact js
React js
 

En vedette

symfony: Un Framework Open-Source pour les Entreprises (Solutions Linux 2008)
symfony: Un Framework Open-Source pour les Entreprises (Solutions Linux 2008)symfony: Un Framework Open-Source pour les Entreprises (Solutions Linux 2008)
symfony: Un Framework Open-Source pour les Entreprises (Solutions Linux 2008)
Fabien Potencier
 
ECM-Webinar: Alfresco Migration Bestandsdaten Teil 2
ECM-Webinar: Alfresco Migration Bestandsdaten Teil 2ECM-Webinar: Alfresco Migration Bestandsdaten Teil 2
ECM-Webinar: Alfresco Migration Bestandsdaten Teil 2
dmc digital media center GmbH
 
Dominator: Rectifieuse plane de profils à CN et avance lente de Jones & Shipman
Dominator: Rectifieuse plane de profils à CN et avance lente de Jones & ShipmanDominator: Rectifieuse plane de profils à CN et avance lente de Jones & Shipman
Dominator: Rectifieuse plane de profils à CN et avance lente de Jones & Shipman
jonesshipman
 
Atelier agile 2009_09_27
Atelier agile 2009_09_27Atelier agile 2009_09_27
Atelier agile 2009_09_27
domidp
 
Ligação do Flex a um backend LAMP usando AMFPHP
Ligação do Flex a um backend LAMP usando AMFPHPLigação do Flex a um backend LAMP usando AMFPHP
Ligação do Flex a um backend LAMP usando AMFPHP
elliando dias
 

En vedette (20)

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

Similaire à Introduction à React

Activity
ActivityActivity
Activity
dido
 
GWT : under the hood
GWT : under the hoodGWT : under the hood
GWT : under the hood
svuillet
 
Cours yeoman backbone box2d
Cours yeoman backbone box2dCours yeoman backbone box2d
Cours yeoman backbone box2d
hugomallet
 
ASP.NET Futures
ASP.NET FuturesASP.NET Futures
ASP.NET Futures
loicbar
 
Asp.Net Futures
Asp.Net FuturesAsp.Net Futures
Asp.Net Futures
loicbar
 

Similaire à Introduction à React (20)

2016_js_react.pdf
2016_js_react.pdf2016_js_react.pdf
2016_js_react.pdf
 
react-slides.ppx (2) (1).pptx react presentation basic
react-slides.ppx (2) (1).pptx react presentation basicreact-slides.ppx (2) (1).pptx react presentation basic
react-slides.ppx (2) (1).pptx react presentation basic
 
react-fr.pdf
react-fr.pdfreact-fr.pdf
react-fr.pdf
 
React redux-tutoriel-1
React redux-tutoriel-1React redux-tutoriel-1
React redux-tutoriel-1
 
React redux-tutoriel-1
React redux-tutoriel-1React redux-tutoriel-1
React redux-tutoriel-1
 
react (1)contexte appbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
react (1)contexte appbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbreact (1)contexte appbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
react (1)contexte appbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
 
Activity
ActivityActivity
Activity
 
Chapitre_11-_React-Redux.pdf
Chapitre_11-_React-Redux.pdfChapitre_11-_React-Redux.pdf
Chapitre_11-_React-Redux.pdf
 
[Devoxx MA 2023] R2DBC = R2D2 + JDBC (enfin presque...)
[Devoxx MA 2023] R2DBC = R2D2 + JDBC (enfin presque...)[Devoxx MA 2023] R2DBC = R2D2 + JDBC (enfin presque...)
[Devoxx MA 2023] R2DBC = R2D2 + JDBC (enfin presque...)
 
Jboss Seam
Jboss SeamJboss Seam
Jboss Seam
 
GWT : under the hood
GWT : under the hoodGWT : under the hood
GWT : under the hood
 
Cours yeoman backbone box2d
Cours yeoman backbone box2dCours yeoman backbone box2d
Cours yeoman backbone box2d
 
Introduction aux RIA (Rich Internet Applications)
Introduction aux RIA (Rich Internet Applications)Introduction aux RIA (Rich Internet Applications)
Introduction aux RIA (Rich Internet Applications)
 
ASP.NET Futures
ASP.NET FuturesASP.NET Futures
ASP.NET Futures
 
Asp.Net Futures
Asp.Net FuturesAsp.Net Futures
Asp.Net Futures
 
Support de Cours JSF2 Première partie Intégration avec Spring
Support de Cours JSF2 Première partie Intégration avec SpringSupport de Cours JSF2 Première partie Intégration avec Spring
Support de Cours JSF2 Première partie Intégration avec Spring
 
Solution Linux 2009 - JavaScript
Solution Linux 2009 - JavaScriptSolution Linux 2009 - JavaScript
Solution Linux 2009 - JavaScript
 
ESTEM_ReactJS_S1.pptx
ESTEM_ReactJS_S1.pptxESTEM_ReactJS_S1.pptx
ESTEM_ReactJS_S1.pptx
 
C# 7 - Nouveautés
C# 7 - NouveautésC# 7 - Nouveautés
C# 7 - Nouveautés
 
Tableau de bord Yammer sous SharePoint 2013
Tableau de bord Yammer sous SharePoint 2013Tableau de bord Yammer sous SharePoint 2013
Tableau de bord Yammer sous SharePoint 2013
 

Dernier (6)

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
 
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
 
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
 
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
 
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
 
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
 

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"));
  • 16.
  • 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)