Académique Documents
Professionnel Documents
Culture Documents
I. Généralité ReactJS
1- Présentation React.js:
React n’est pas à proprement parler un Framework mais se présente comme une bibliothèque
JavaScript pour créer des interfaces utilisateurs. React est la réponse de Facebook à un
problème récurrent : créer des interfaces réutilisables et stateful.
Tout d’abord, React est basé sur virtual-dom : un composant React ne crée pas de HTML mais
une représentation sous forme d’objets et de nœuds de ce à quoi le HTML final doit ressembler.
Virtual-dom va prendre en compte cette représentation, la comparer au DOM réel et en
déduire les opérations minimales à exécuter pour que le DOM réel soit conforme au virtuel.
C’est grâce à cet outil que React peut partir du principe qu’il est plus simple de “remplacer”
toute l’interface quand elle doit être modifiée plutôt que de modifier au fur et à mesure le DOM
comme jQuery ou Angular/ AngularJS pouvaient le faire.
L’intérêt de cette approche est assez simple. On reproche souvent à JavaScript d’être lent alors
que c’est DOM qui l’est. Avoir une représentation sous forme d’arbre en JavaScript permet de
réaliser beaucoup plus d’opérations, d’utiliser les meilleurs algorithmes de comparaison
d’arbres et, cerise sur le gâteau, de faire toutes les modifications du DOM en une opération
plutôt qu’au fur et à mesure. Virtual-dom est également bien plus facile à mettre à jour et à
améliorer que les différentes implémentations de DOM dans les navigateurs.
2- Installation ReactJS:
• Télécharger le NodeJS
• Installer NodeJS
• Installer la commande : create-react-app
Dans l’invite de commande
create-react-app premiertest
cd premiertest
npm start
✓ Consulter http://localhost:3000
✓ Structure du projet
- npm (Node package Management) sert à installer toutes les dépendances et les
packages dont le projet a besoin
npm install
yarn
Pour lier une application React au DOM, il faut utiliser le package ReactDOM et la fonction
render() avec en paramètres, le composant racine de l’application et le nœud du DOM auquel
il sera rattaché.
Ce package va tout simplement nous permettre de “monter” notre application React sur un
élément du DOM (ici un élément qui possède l’id “root”) :
La méthode render prend donc 2 paramètres, l’élément React, racine de notre application et
le nœud du DOM sur lequel est attaché l’élément React.
4- Le virtual DOM
React implémente un concept très intéressant : le virtualDOM. Un concept qui va nous
permettre de réaliser des applications web complexes et rapides !
a- Le DOM
Le DOM est l’API qui permet de manipuler le contenu hiérarchisé de notre page web
(du HTML donc) sous forme d’arbre. Les éléments HTML constituent les nœuds de cet
arbre.
- Les limites
Un arbre, c’est pratique à parcourir, un peu moins à modifier (supprimer, ajouter des
éléments) mais surtout, modifier le DOM implique le recalcule de la disposition et style
de chacun des éléments de la page, conduisant à de sérieux problèmes de
performance lorsque l’on réalise de nombreuses modifications.
b- React/JSX :
React utilise JSX pour la création de modèles au lieu de JavaScript classique. Il n'est pas
nécessaire de l'utiliser, cependant, voici quelques avantages qui vont avec.
✓ Il est plus rapide car il effectue une optimisation lors de la compilation du code en
JavaScript.
✓ Il est également compatible avec le type et la plupart des erreurs peuvent être
interceptées lors de la compilation.
✓ Il est plus facile et plus rapide d’écrire des modèles si vous maîtrisez le langage HTML.
c- Utiliser JSX
JSX ressemble à un HTML normal dans la plupart des cas. Nous l'avons déjà utilisé dans le
chapitre Configuration de l'environnement. Regardez le code de App.jsx où nous
retournons div.
render() {
return (
<div>
Hello World!!!
</div>
);
}
}
export default App;
Dans le fichier index.js, Ajouter la composante App
import App from './App';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<React.StrictMode>
<App />
</React.StrictMode>
);
Dans la console, Taper la commande : npm start
Même si cela ressemble au HTML, nous devons garder à l’esprit quelques points lorsque nous
travaillons avec JSX.
5- Éléments imbriqués
Si nous voulons renvoyer plus d'éléments, nous devons l'envelopper avec un seul élément
conteneur. Remarquez comment nous utilisons div comme wrapper pour les
éléments h1 , h2 et p .
);
}
Résultat :
6- Les attributs
Nous pouvons utiliser nos propres attributs personnalisés en plus des propriétés et attributs
HTML normaux. Lorsque nous voulons ajouter un attribut personnalisé, nous devons utiliser
le préfixe de données. Dans l'exemple suivant, nous avons ajouté data-myattribute en tant
qu'attribut de l’élément p.
7- Expressions JavaScript
Les expressions JavaScript peuvent être utilisées dans JSX. Nous avons juste besoin de
l'envelopper avec des accolades {} . L'exemple suivant rendra 2 .
<p>Résultat:{1+1}</p>
</div>
);
}
Résultat :
Nous ne pouvons pas utiliser les instructions if else dans JSX, mais utiliser
des expressions conditionnelles (ternaires) . Dans l'exemple suivant, la variable i est égale
à 1 pour que le navigateur rende la valeur true . Si nous la changeons en une autre valeur, elle
rendra la valeur false .
React recommande d'utiliser des styles en ligne. Lorsque nous voulons définir des styles en
ligne, nous devons utiliser la syntaxe :
React ajoutera aussi automatiquement px après le nombre sur des éléments spécifiques.
8- Commentaires
Lorsque vous écrivez des commentaires, nous devons mettre des accolades {} lorsque nous
voulons écrire des commentaires dans la section enfants d'une balise. Il est recommandé de
toujours utiliser {} lors de la rédaction des commentaires, car nous souhaitons être cohérents
lors de la rédaction de l'application.
Syntaxe :
9- Convention de nommage
Les balises HTML utilisent toujours des noms de balises minuscules, tandis que les composants
de React commencent par Uppercase .
Remarque - Vous devez utiliser className et htmlFor en tant que noms d'attributs XML au lieu
de class et pour.
Comme JSX est JavaScript, les identificateurs tels que class et for sont déconseillés en tant que
noms d'attributs XML. Au lieu de cela, les composants DOM de React attend des noms de
propriété DOM tels que className et htmlFor, respectivement.
Exemple :
.style1 {
color: red;
font-size: 40px;
}
Code source App.jsx
import './App.css'
III. Hooks
Les hooks en React sont des fonctions qui vous permettent d'ajouter des fonctionnalités de
composant à vos fonctions de composant. Ils vous permettent de gérer l'état et les effets de
composant sans écrire une classe. Les hooks populaires incluent useState, useEffect,
useContext, useReducer et useRef. Les hooks sont une fonctionnalité introduite dans React 16.8
et ont été conçues pour rendre la programmation plus facile et plus cohérente en vous
permettant de partager du code entre les composants.
1- useState
useState est un hook en React qui permet de gérer l'état local d'un composant. Il retourne un
tableau avec deux éléments, la première valeur étant la variable d'état actuelle et la seconde
étant une fonction pour la mettre à jour. Cette fonction de mise à jour peut être appelée pour
changer la valeur d'état, ce qui déclenchera une ré-rendu du composant. useState est souvent
utilisé pour stocker et gérer les données interactives d'un composant, telles que les entrées de
formulaire, les valeurs de sélection, etc.
Exemple :
2- UseEffect :
useEffect est un hook en React qui permet de gérer les effets de composant. Les effets de
composant sont des opérations que vous souhaitez effectuer lorsque le rendu d'un composant
est terminé, telles que des mises à jour dans le DOM, des requêtes réseau, des temporisations,
etc.
En utilisant useEffect, vous pouvez éviter de devoir écrire des méthodes de cycle de vie telles
que componentDidMount ou componentDidUpdate pour gérer les effets de
Exemple :
return (
<div>
Résultat :
Description :
Dans cet exemple, nous déclarons une variable d'état cp avec une valeur initiale de 0 en utilisant
useState. Nous passons également une fonction setCp qui peut être utilisée pour mettre à jour
la valeur d'état. Dans notre rendu, nous affichons la valeur actuelle de cp et attachons une
fonction de gestion d'événement à notre bouton pour incrémenter la valeur de cp lorsqu'il est
cliqué.
3- useRef :
useRef est un hook en React qui permet de stocker des références mutables (des valeurs qui
peuvent être modifiées) au fil du temps. Il est souvent utilisé pour stocker des références à des
éléments du DOM, des objets d'animation, des timers, etc.
const va = useRef(null);
const vb = useRef(null);
};
return (
<form onSubmit={Calculer}>
<label>
a:<input type="number"
value={a} onChange={event => setA(event.target.value)}
ref={va}
/>
</label>
<br />
<br />
<label>
Second number:
<input type="number"
value={b}
onChange={event => setB(event.target.value)}
ref={vb}
/>
</label>
<br />
<br />
<button type="submit">Somme</button>
<br />
<br />
Résultat: {r}
</form>
);
}
Résultat :
4- useReducer
useReducer est un hook React qui permet de gérer les états complexes dans votre application.
Il s'agit d’une alternative plus avancée à useState, qui peut être plus appropriée pour les cas où
vous avez besoin de manipuler plusieurs états interdépendants ou de gérer des opérations
asynchrones.
useReducer prend en entrée un reduceur (reducer en anglais), qui est une fonction qui décrit
comment l'état actuel de l'application doit être mis à jour en fonction d'une action. Il renvoie
également un état et une fonction d'action pour le mettre à jour.
5- useContext
useContext est un hook React qui permet d'accéder à la valeur d'un contexte partagé. Il
simplifie la gestion de la transmission de données à travers l'arbre des composants d'une
application sans avoir à propager manuellement les props à chaque niveau.
Avant useContext, la transmission de données partagées dans une application React était
généralement réalisée en passant les props à chaque composant intermédiaire jusqu'au
composant final qui en avait besoin. Cela pouvait entraîner une longue chaîne de props et
rendre le code difficile à maintenir.
function WelcomeMessage(props) {
return <h1>Bienvenue, {props.nom}</h1>;
}
V. ReactJS - Router
Pour utiliser React Router dans votre application React, vous pouvez suivre les étapes suivantes :
ou
ii. Importer le composant Router et les composants Route et Link dans votre fichier de
composant principal :
function App() {
return (
<Router>
<div>
{/* mettre le code de route ici*/}
</div>
</Router>
);
}
v. Créez des liens entre les différentes routes en utilisant le composant Link :
<Link to="/">Home</Link>
<Link to="/about">About</Link>
Ce sont les étapes de base pour utiliser React Router dans votre application React. Pour plus
d'informations sur les fonctionnalités avancées, veuillez consulter la documentation officielle
de React Router.
Exemple :
<hr />
<Routes>
<Route path='/' element={<Home/>} />
<Route path='/about' element={<About/>} />
</Routes>
</div>
</Router>
);
}
Résultat :
Redux est une bibliothèque open source pour la gestion de l'état dans les applications
JavaScript. Il se concentre sur la gestion des données dans une application en utilisant un seul
magasin central qui contient toutes les données de l'application. Les données sont modifiées
en utilisant des actions qui décrivent les mises à jour à apporter au magasin, et les mises à jour
sont effectuées en utilisant un reducteur qui prend en compte les actions et les données
existantes pour produire une nouvelle version du magasin. Redux s'intègre facilement avec
d'autres bibliothèques et frameworks, tels que React.
Redux utilise une architecture centralisée pour la gestion des données qui ajoute une
prévisibilité et une consistance aux applications. Le magasin Redux est la source unique de
vérité pour les données de l'application, ce qui signifie que les composants de l'application ne
doivent pas se synchroniser les uns avec les autres pour trouver la dernière version des
données. Les actions sont simples objets JavaScript qui décrivent une mise à jour à apporter au
magasin, et les réducteurs sont des fonctions pures qui prennent en compte les actions et les
données existantes pour produire une nouvelle version du magasin. Les développeurs peuvent
utiliser des outils de débogage pour surveiller les actions et les états du magasin, ce qui aide à
comprendre et à résoudre les problèmes. En fin de compte, Redux aide les développeurs à
créer des applications plus fiables et plus faciles à maintenir.
Le store de Redux est géré par le biais d'une fonction appelée "reducer". Le réducteur est
responsable de la modification de l'état en fonction des actions qui sont déclenchées. Les
actions sont simplement des objets qui décrivent une modification souhaitée de l'état.
Lorsqu'une action est déclenchée, le réducteur la traite et modifie l'état en conséquence. Les
composants de l'interface utilisateur qui sont abonnés au store sont informés de cette
modification, ce qui leur permet de se mettre à jour en conséquence.
Le store de Redux est également le seul endroit où l'état peut être modifié, ce qui garantit la
cohérence et la prévisibilité de l'état de l'application.
L'état est le cœur de chaque composant à état réactif. Il détermine comment le composant doit
se comporter ou être rendu. Pour vraiment comprendre l'état, nous devons l'appliquer à de
vrais exemples. L'utilisateur est-il authentifié ? est un état qui contrôle si un utilisateur est
authentifié ou non, le modal est-il ouvert ? est aussi un état qui regarde si un modal donné est
ouvert ou pas même chose pour le cas d'une liste d'articles ou d'un compteur etc.
composant. Il envoie les données de votre composant React à votre store Redux. L'action
n'atteint pas le store, c'est juste le messager. Le store est changé par le réducteur.
c- Installation :
npm i react-redux
d- Exemple 01:
Redux peut être facilement utilisé dans une application React en suivant ces étapes simples :
iv. Dispatcher une action en utilisant la méthode "dispatch" pour mettre à jour l'état de
l'application
Exemple :
// État initial
const initialState = {
cp: 0
};
// Actions
const increment = () => ({
type: 'INCREMENT'
});
// Composant React
function Application(props) {
return (
<div>
<p>Compteur: {props.cp}</p>
<button onClick={props.increment}>Incrémenter</button>
<button onClick={props.decrement}>Décrémenter</button>
</div>
);
}
});
Explication:
Exemple 02 :
const data = [
{ id: 1, nom: 'KAMAL Mohamed', age: 30 },
{ id: 2, nom: 'Hicham Saadi', age: 25 },
{ id: 3, nom: 'Dahbi Naim', age: 35 },
];
return (
<ul>
{stagiaires.map(s => (
<li key={s.id}>
Nom: {s.nom}, Age: {s.age}
</li>
))}
</ul>
);
};