0% ont trouvé ce document utile (0 vote)
109 vues16 pages

Gestion des Événements en React

Ce document décrit la gestion des événements et la communication entre composants en React. Il explique les différences de syntaxe pour les événements entre HTML et React, et donne des exemples d'utilisation de callbacks et de fonctions fléchées. Il présente ensuite des exemples de communication entre composants parent et enfants pour transmettre des données.

Transféré par

dragob benabdallh
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
109 vues16 pages

Gestion des Événements en React

Ce document décrit la gestion des événements et la communication entre composants en React. Il explique les différences de syntaxe pour les événements entre HTML et React, et donne des exemples d'utilisation de callbacks et de fonctions fléchées. Il présente ensuite des exemples de communication entre composants parent et enfants pour transmettre des données.

Transféré par

dragob benabdallh
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

C12 : Développer en Front-end

OFPPT – DRIF
S8 : Gestion des évènements(Events)
CDC en Digital, Intelligence Artificielle,
Communication entre composant
Audiovisuel et Cinéma
Cours

8.1. Gestion des événements


La gestion des événements avec des éléments React est très similaire à la gestion des
événements sur les éléments DOM. Il existe quelques différences de syntaxe :

 Les événements React sont nommés en camelCase, plutôt qu'en minuscules.


 Avec JSX, vous transmettez une fonction en tant que callBack fonction ou arrow
fonction, plutôt qu'une chaîne.
Exemples :
onClick
HTML <button onclick="ajouter()">
Ajouter article
</button>

REACT //callBack function


<button onClick={ajouter}>
Ajouer article
</button>

REACT //Arrow function


<button onClick={ajouter}>
Ajouer article
</button>

onSubmit
HTML <form onsubmit="[Link]('You clicked submit.'); return
false">
<button type="submit">Submit</button>
</form>
REACT //arrow fonction
import React from 'react'
export default function Form() {
function handleSubmit(e) {
[Link]();[Link]('You clicked
submit.');
}
return (
//arrow function
<form onSubmit={(event)=>handleSubmit(event)}>
<button type="submit">Submit</button>
</form>
);
}

Réalisé par ABDELMOUNIM BENDAOUD et NOUREDDINE ABABAR 1 / 16


C12 : Développer en Front-end
OFPPT – DRIF
S8 : Gestion des évènements(Events)
CDC en Digital, Intelligence Artificielle,
Communication entre composant
Audiovisuel et Cinéma
Cours

REACT //callBack function


import React from 'react'
export default function Form() {
function handleSubmit(e) {
[Link]();[Link]('You clicked
submit.');
}
return (
//callBack function
<form onSubmit={handleSubmit}>
<button type="submit">Submit</button>
</form>
);
}
onChange
HTML
<input type="text" onchange=”changeNom()”}></input>

REACT <input type="text" onChange={changeNom}></input>

On peut utiliser les callBack et les Arrow fonctions pour gérer les évènements
Exercice d’application 1

Réalisé par ABDELMOUNIM BENDAOUD et NOUREDDINE ABABAR 2 / 16


C12 : Développer en Front-end
OFPPT – DRIF
S8 : Gestion des évènements(Events)
CDC en Digital, Intelligence Artificielle,
Communication entre composant
Audiovisuel et Cinéma
Cours

Quand l’utilisateur clique sur Afficher s’affiche le message contenant le nom et le prenom
Solution :
import React, { useState } from "react";
export default function Inscription(){
const [nom,setNom]=useState()
const [prenom,setPrenom]=useState()
const [information,setInformation]=useState()

function envoyer(){
setInformation(`nom:${nom} prenom:${prenom}`)
}

return(
<div>
<h2></h2>
<div>
<label>Nom:</label><input type="text"
onChange={(e)=>{setNom([Link]())}}/>
</div>
<div>
<label>Prenom:</label><input type="text"
onChange={(e)=>{setPrenom([Link]())}}/>
</div>
<button onClick={envoyer}>Afficher</button>
<p>{information}</p>
</div>

)
}
Remarque importante : Si on remplace cette écriture
<button onClick={envoyer}>Afficher</button>
Par
<button onClick={envoyer()}>Afficher</button>

On aura le massage d’erreur

Car envoyer est exécuter après chaque render de composant, de plus la méthode envoyer
contient le code suivant :

setInformation(`nom:${nom} prenom:${prenom}`)
qui a son tours déclenche un render a cause de Hook useState setInformation

Réalisé par ABDELMOUNIM BENDAOUD et NOUREDDINE ABABAR 3 / 16


C12 : Développer en Front-end
OFPPT – DRIF
S8 : Gestion des évènements(Events)
CDC en Digital, Intelligence Artificielle,
Communication entre composant
Audiovisuel et Cinéma
Cours

Exercice Application 2 :
On peut valider les éléments input facilement en utilisant le Système gestion d’état de
Rect.
Essayons ça en créant un simple validateur de mot de passe. Ce dernier va être un input
text qui nécessite l’utilisateur d’entrer un mot de passe qui contient au moins 4
caractères.
Si l’utilisateur entre un mot de passe moins de 4 caractères. un message d’erreur va être
affiché «Password doit avoir au moins de 4 caractères"

Solution :
Avec fonctionnel composant
import React, { useState } from 'react'
export default function Validator(){

const [password,setPassword]=useState('')

return(
<div>
<div>
<label>Entrer votre password:</label>
<input type="password"
value={password}
onChange={(event)=>setPassword([Link])}
/>
</div>
{[Link]<4?"Password doit avoir au moins t 4
caractères":""}
</div>
)
}

Réalisé par ABDELMOUNIM BENDAOUD et NOUREDDINE ABABAR 4 / 16


C12 : Développer en Front-end
OFPPT – DRIF
S8 : Gestion des évènements(Events)
CDC en Digital, Intelligence Artificielle,
Communication entre composant
Audiovisuel et Cinéma
Cours

Avec classe composant


import React, { useState } from 'react'
export default class Validator extends [Link]{

constructor (){
super();
[Link]={password:''}
}
render(){

return(
<div>
<div>
<label>Entrer votre password:</label>
<input type="password"
value={[Link]}
onChange={(event)=>
[Link]({password:[Link]})}
/>
</div>
{[Link]<4?"Password doit avoir au moins t 4
caractères":""}
</div>
)
}
}

Réalisé par ABDELMOUNIM BENDAOUD et NOUREDDINE ABABAR 5 / 16


C12 : Développer en Front-end
OFPPT – DRIF
S8 : Gestion des évènements(Events)
CDC en Digital, Intelligence Artificielle,
Communication entre composant
Audiovisuel et Cinéma
Cours

8.2. Communication inter-composant (envoi, réception de données):


Exemple :

On suppose que nous disposons de trois composants :

 App
 ChercherBar
 ResultatList
Les composants ChercherBar et ResultatList sont imbriqués dans le composant App

Réalisé par ABDELMOUNIM BENDAOUD et NOUREDDINE ABABAR 6 / 16


C12 : Développer en Front-end
OFPPT – DRIF
S8 : Gestion des évènements(Events)
CDC en Digital, Intelligence Artificielle,
Communication entre composant
Audiovisuel et Cinéma
Cours

On dispose d’une liste

const list=[
{nom:"banane",type:"fruit"},
{nom:"orange",type:"fruit"},
{nom:"pomme",type:"fruit"},
{nom:"raisins",type:"fruit"},
{nom:"kiwi",type:"fruit"},
{nom:"tomate",type:"legume"},
{nom:"carotte",type:"legume"},
{nom:"pomme de terre",type:"legume"},
{nom:"navet",type:"legume"},
{nom:"poivron",type:"legume"}
]
Pour des raisons pédagogiques les éléments de la liste sont de type "legume" ou "fruit"
Cette liste est une constante dans le composant App
L’utilisateur saisi le type dans le composant ChercheBar, la soumission du formulaire
déclenche un callBack de la fonction qui aura la valeur saisie dans Cherchebar comme
argument et qui va filtrer la liste selon le type saisie, puis le composant ResultatList
affiche les éléments filtrés.

8.2.1. Communication de parent vers enfant

Déjà dans la séance 6 on a vu comment passer les informations à un composant via les
props
<Presentation nom="Rami" prenom="Ahmed"/>

Réalisé par ABDELMOUNIM BENDAOUD et NOUREDDINE ABABAR 7 / 16


C12 : Développer en Front-end
OFPPT – DRIF
S8 : Gestion des évènements(Events)
CDC en Digital, Intelligence Artificielle,
Communication entre composant
Audiovisuel et Cinéma
Cours

Code [Link]

import React, { useState } from 'react'


import ChercheBar from './components/ChercheBar';
import ResultatList from './components/ResultatList';
const list=[
{nom:"banane",type:"fruit"},
{nom:"orange",type:"fruit"},
{nom:"pomme",type:"fruit"},
{nom:"raisins",type:"fruit"},
{nom:"kiwi",type:"fruit"},
{nom:"tomate",type:"legume"},
{nom:"carotte",type:"legume"},
{nom:"pomme de terre",type:"legume"},
{nom:"navet",type:"legume"},
{nom:"poivron",type:"legume"}
]

export default function App() {


const [type,setType]=useState('')
const [resultas,setResultas]=useState([])
function onChercheSubmitApp(type){
setType(type)
setResultas([Link]((item)=>[Link]()==type))
}
return (
<div className='App'>
<h1>Composant App</h1>
<ChercheBar onChercheSubmit={onChercheSubmitApp}/>
<div>
<p>le type:<span style={{color:"rgb(36,
44,33)",fontWeight:"bold"}}>{type}</span></p>
</div>
<ResultatList resultats={resultas}/>
</div>
);
}

<ResultatList resultats={resultas}/>
Le composant ResultatList reçoit l’information resultas via le props resultats

Réalisé par ABDELMOUNIM BENDAOUD et NOUREDDINE ABABAR 8 / 16


C12 : Développer en Front-end
OFPPT – DRIF
S8 : Gestion des évènements(Events)
CDC en Digital, Intelligence Artificielle,
Communication entre composant
Audiovisuel et Cinéma
Cours

8.2.2. Communication d’enfant vers parent

Réalisé par ABDELMOUNIM BENDAOUD et NOUREDDINE ABABAR 9 / 16


C12 : Développer en Front-end
OFPPT – DRIF
S8 : Gestion des évènements(Events)
CDC en Digital, Intelligence Artificielle,
Communication entre composant
Audiovisuel et Cinéma
Cours

Explication du code de composant App


<ChercheBar onChercheSubmit={onChercheSubmitApp}/>

On a passé au composant ChercheBar le props onChercheSubmit={onChercheSubmitApp}


Le props onChercheSubmit contient la callback fonction onChercheSubmitApp
const [type,setType]=useState('')
const [resultas,setResultas]=useState([])
function onChercheSubmitApp(type){
setType(type)
setResultas([Link]((item)=>[Link]()==type))
}
onChercheSubmitApp met à jour le type par la valeur de l’argument, puis filtre la liste sur le
type dont la valeur est passée en argument.
onChercheSubmitApp sera exécuté quand l’utilisateur submit le formulaire
Le composant ResultatList est ré-rendu avec la liste résultats filtrée explication par schéma, les
numéros marquent l’ordre chronologique des étapes d’exécutions

Réalisé par ABDELMOUNIM BENDAOUD et NOUREDDINE ABABAR 10 / 16


C12 : Développer en Front-end
OFPPT – DRIF
S8 : Gestion des évènements(Events)
CDC en Digital, Intelligence Artificielle,
Communication entre composant
Audiovisuel et Cinéma
Cours

Le code de [Link]
import React, { useState } from "react";
export default function ChercheBar(props) {
const [term,setTerm]=useState('')
function onChercheSubmitBar(event){
[Link]()
[Link](term)
}
return (
<div className="Child">
<form onSubmit={(event)=>onChercheSubmitBar(event)}>
<h2>composant ChercheBar</h2>
<div>
<label>Entrer le mot clé de recherche:</label>
<input type="text" value={term}
onChange={(event)=>setTerm([Link]())} />
</div>
<button type="submit">chercher</button>
</form>
</div>
);
}

Réalisé par ABDELMOUNIM BENDAOUD et NOUREDDINE ABABAR 11 / 16


C12 : Développer en Front-end
OFPPT – DRIF
S8 : Gestion des évènements(Events)
CDC en Digital, Intelligence Artificielle,
Communication entre composant
Audiovisuel et Cinéma
Cours

Le code de [Link]

import React from "react";


export default function ResultatList(props) {
return (
<div className="Child">
<h1>composant ResultatList</h1>
{[Link] == 0 ? (
<p>pas de resultats</p>
) : (
<div className="list">
<ul>
{[Link]((item) => {
return <li key={[Link]}>{[Link]}</li>;
})}
</ul>
</div>
)}
</div>
);
}

8.3. Cycle de vie des composants


8.3.1. Cycle de vie Composants créer via classes
Composant life cycle est caractérisée par les méthodes optionnelles qu’on peut définir
dans un composant créé par une classe.
React est responsable de faire l’appel automatique de ces méthodes au moment
convenable (voir schéma) pendant le cycle de vie de composant

Réalisé par ABDELMOUNIM BENDAOUD et NOUREDDINE ABABAR 12 / 16


C12 : Développer en Front-end
OFPPT – DRIF
S8 : Gestion des évènements(Events)
CDC en Digital, Intelligence Artificielle,
Communication entre composant
Audiovisuel et Cinéma
Cours

Exemple qui va illustrer le cycle de vie d’un composant classe

Le composant Compteur contient un compteur qu’on peut l’incrémenter et décrémenter


Le composant AppCompteur contient deux boutons pour charger et décharger le
composant Compteur
Le composant AppCompteur est utilisé seulement pour vérifier la methode
componentWillUnmount

Rendu console au premier chargement

Quand je clique sur le bouton incrémenter ou décrémenter

Quand je click sur le bouton Démonter

Code source : [Link]

import React from "react";


import ReactDOM from "react-dom/client";
import AppCompteur from "./components/AppCompteur";
const root=[Link]([Link]("root"))
[Link](<AppCompteur/>);

Réalisé par ABDELMOUNIM BENDAOUD et NOUREDDINE ABABAR 13 / 16


C12 : Développer en Front-end
OFPPT – DRIF
S8 : Gestion des évènements(Events)
CDC en Digital, Intelligence Artificielle,
Communication entre composant
Audiovisuel et Cinéma
Cours

[Link]

import React from 'react'


export default class Compteur extends [Link]{
constructor(props) {
[Link]("constructeur")
super(props)

[Link] = {
compteur:0
}
[Link]=()=>{[Link]({compteur:[Link]+1})}
[Link]=()=>{[Link]({compteur:[Link]-1})}
}

componentDidMount(){
//cette methode est executé aprés render
[Link]("Component Did mount")
[Link]('--------------------')
}

componentDidUpdate(){
//cette methode est executé aprés mise à jour par setState

[Link]("Component Did update")


[Link]('--------------------')
}
componentWillUnmount(){
[Link]("Component est demonté")
}
render(){
[Link]('Render')
return(
<div style={{background:"yellow"}} >
<h3>composant Compteur</h3>
<p>compteur:{[Link]}</p>
<button onClick={[Link]}>Incrementer</button>
<button onClick={[Link]}>Decrementer</button>

</div>
)
}
}

Réalisé par ABDELMOUNIM BENDAOUD et NOUREDDINE ABABAR 14 / 16


C12 : Développer en Front-end
OFPPT – DRIF
S8 : Gestion des évènements(Events)
CDC en Digital, Intelligence Artificielle,
Communication entre composant
Audiovisuel et Cinéma
Cours

[Link]

import React from 'react'


import Compteur from './Compteur'
export default class AppCompteur extends [Link]{

constructor(props) {

super(props)
[Link]={isMonter:true}
[Link]=()=>{[Link]({isMonter:true})}
[Link]=()=>{[Link]({isMonter:false})}
}

render(){

return(
<div >
<button onClick={[Link]}
disabled={[Link]}>Monter</button>
<button onClick={[Link]}
disabled={![Link]}>Demonter</button>
{ [Link]? <Compteur/>:null}
</div>
)
}
}

8.3.2. Cycle de vie Composants créer via fonction


Vous pouvez tirer parti du Hook useEffect pour obtenir les mêmes résultats qu'avec les
méthodes

 componentDidMount
 componentDidUpdate
 componentWillUnmount
useEffect accepte deux paramètres. Le premier est un rappel qui s'exécute après le rendu,
un peu comme dans componentDidMount.
Le deuxième paramètre est le tableau des dépendances d'effet. Si vous souhaitez
l'exécuter uniquement lors du montage et du démontage, passez un tableau vide [].

Réalisé par ABDELMOUNIM BENDAOUD et NOUREDDINE ABABAR 15 / 16


C12 : Développer en Front-end
OFPPT – DRIF
S8 : Gestion des évènements(Events)
CDC en Digital, Intelligence Artificielle,
Communication entre composant
Audiovisuel et Cinéma
Cours

Voir cours séance 12

Réalisé par ABDELMOUNIM BENDAOUD et NOUREDDINE ABABAR 16 / 16

Vous aimerez peut-être aussi