Un peu d'histoire...

· 1995 :

· 2008 :

· 2009 :

· 2013 :

Pourquoi choisir

React JS ?

I. Portrait robot
de React JS

( origine, généralités, principes-clefs )

Fiche signalétique (1)

· Concepteur : Jordan Walke ( ingénieur Facebook, fin 2011 )

· Collaborateur : Pete Hunt ( ingénieur Instagram )

· Publication : 29 mai 2013 ( sous licence Apache 2.0 )

· React “Native” : mars 2015 ( sous iOS, Android, UWP )

· Dernière version : 15.4.2 ( 6 janvier 2017 )

 

· Site web : reactjs.com ( https://facebook.github.io/react/ )

Fiche signalétique (2)

· Définition : bibliothèque JS ( framework, template )

· Principe : « Declarative, component-based, flexible »

· Finalité : créer des applications web monopage
                 orienté UI / génère une vue réactive (modèle MVC)
                         s'appuie sur un DOM virtuel

 

· Inspiré de : XHP ( librairie* pour inclusions d'HTML dans PHP )

· Particularité : JSX ( langage* : hybridation JS HTML )

Ils utilisent React...

II. Fonctionnement
de React JS

( implementation, syntaxe, logiques... )

Implementation (1)

<script src="https://unpkg.com/react@15/dist/react.js"></script>
<script src="https://unpkg.com/react-dom@15/dist/react-dom.js"></script>

· CDN ( content delivery network )

https://facebook.github.io/react/docs/installation.html

· Packages

OU

Implementation (2)

· JSX : package “Babel”

http://babeljs.io/

· Attention :

les autres implémentations
comme JSXTransformer.js
sont aujourd'hui deprecated !

<script type="text/babel"></script>

Débuts...


<div id="out"></div>


ReactDOM.render(
  <h1>Bienvenue dans React !</h1>,
  document.getElementById('out')
);
• HTML :


• JS(X) :

La base : ReactDOM.render(contenu, position);

Création de composant

var monComposant = React.createClass({     
     render : function(){
          return(
               <h1>Bienvenue dans React !</h1>
          );
     }
});
ReactDOM.render(
     <monComposant/>,
     document.getElementById('out')
);

React.createElement /.createClass / .Component

class monComposant extends React.Component{
     render(){   [...]

 

function monComposant (props){
     return   [...]
var monComposant = React.createClass({
     render : function(){
          return(<div>
                       <h1>React v{this.props.version}</h1>
                       <h2>Bienvenue {this.props.prenom} !</h2>
                 </div>
          );
     }
});

 

ReactDOM.render(
     <div className="accueil">
          <monComposant prenom="Ulrich" version={15}/>
          <monComposant prenom="Vincent" version={14}/>
     </div>,
     document.getElementById('out')
);

props

...

var {version,prenom}=this.props;
[...] <h1>React v{version}</h1>
var monComposant = React.createClass({
     render : function(){
          return(<div>
                       <h1>React v{this.props.version}</h1>
                       <h2>Bienvenue {this.props.children} !</h2>
                 </div>
          );
     }
});

 

ReactDOM.render(
     <div className="accueil">
          <monComposant version={15}>Ulrich</>
          <monComposant version={14}>Vincent</>
     </div>,
     document.getElementById('out')
);

children

...

var monComposant = React.createClass({
     saluer : function(){
          alert("Bienvenue {this.props.prenom} !")
     },
     render : function(){
          return(<div onClick={this.saluer}>
                       <h1>React v{this.props.version}</h1>
                 </div>
          );
     }
});

 

ReactDOM.render(
     <div>
          <monComposant prenom="Ulrich" version="15"/>
     </div>,
     document.getElementById('out')
);

événement

...

var monComposant = React.createClass({
     getInitialState: function(){
          return {accueil:true}
     },
     changer: function(){
          this.setState({accueil:!this.state.accueil})
     },
     render : function(){
          var msg;
          if(this.state.accueil){
                 msg="Bienvenue"
          }else{
                 msg="À bientôt"
          }
          return(
                 <div onClick={this.changer}>
                       <h2>{msg} {this.props.prenom} !</h2>
                 </div>
          );
     }
});          [...]
 

state / getInitialState / setState

...

constructor(props){
     super(props); 
     this.state={...} [...]

Et après ...?

• agir sur le style :

"... style={...}"

state tableau :

"... {prenom:['Ulrich', 'Vincent', ...]}"
EX: "[...] this.state.prenom.map(function(texte,i)){
                  return(<p key={i}>Hello {texte}<p/>)
            }"

• composants parent > enfant

render différent selon le state

...

index={i} 
     

III. Pourquoi
utiliser React JS ?

( avantages / inconvénients )

En synthèse (1)

· ne gère que la vue
· pas de cloisonnement net entre html et JS

· n'a pas la puissance d'un framework (mais combinable !)

 

· très souple et flexible (base composant)

· modification de page instantanée

· facilement intégrable à des projets déjà créés

· techno en pleine effervescence...

Bienvenue dans
la galaxie React !

 

 

 

 

 

 

...

Sources :

• articles wikipedia (FR & ENG)

• site officiel : facebook.github.io/react/ (ENG)

• code.facebook.com/projects/ (ENG)

• tutoriels youtube : Bucky Roberts / thenewboston (ENG)

• avis d'utilisateurs

React JS

By mariusm

React JS

A Facebook library

  • 258