Framework React
Présentation de React
React est indiscutablement l’un des meilleurs frameworks JavaScript de type « front-end ». Ses concurrents majeurs sont Vue.js (non traité dans ce livre) et Svelte (étudié en détail dans le chapitre Framework Svelte).
React est une bibliothèque JavaScript plébiscitée par les développeurs depuis sa création en 2013. Le contributeur principal de ce framework est la société Facebook.
React a assez rapidement connu un très grand succès et est utilisé par exemple par Instragram, WhatsApp, Netflix, Yahoo, Airbnb, Sony…
L’objectif de React, parfois aussi appelé React.js ou encore ReactJS, est de fournir un outillage pour concevoir des applications web monopages (Single Page Application).
Le principe de React est de permettre la construction de composants ayant un état et de faire en sorte que la page HTML en entier (ou en partie) soit actualisée à chaque changement d’état des composants la constituant.
React gère exclusivement l’interface de l’application, c’est-à-dire la vue d’un modèle MVC (Model-View-Controller). React est donc utilisé avec d’autres frameworks, par exemple avec Angular basé, lui, sur le MVC.
Le modèle MVC est très utilisé dans les développements informatiques....
Création locale d’un projet React
Ne nous attardons pas longuement sur ce sujet car l’installation locale de l’environnement React est relativement simple et parfaitement décrite sur le site officiel, à l’adresse https://fr.reactjs.org/docs/create-a-new-react-app.html
Selon les recommandations de ce site, pour une utilisation minimale de React en mode local, vous devrez suivre la démarche ci-après.
Pour créer un nouveau projet React, afin de vous éviter la création manuelle des scripts constituant le squelette, il est préférable d’utiliser en mode ligne de commande l’environnement Create React App.
Avant de procéder à la création de votre projet, vous devrez veiller à installer Node.js. La procédure pour le faire a été étudiée dans le chapitre Installation de Node.js de ce livre.
Ensuite (en mode ligne de commande), saisissez consécutivement les instructions ci-après :
npx create-react-app mon-app
cd mon-app
npm start
Dans cette séquence de commandes, le projet mon-app est créé (vous avez bien sûr le loisir de choisir un nom personnalisé pour vos propres réalisations). Il faut ensuite vous rendre dans le répertoire qui a été créé par Create React App (commande cd) et lancer l’application (que nous appellerons...
Projets React basiques
Nous allons découvrir les possibilités du framework React au travers d’une série d’exemples, comme nous l’avons fait au chapitre précédent pour Svelte.
L’option a été prise de ne pas programmer exactement les mêmes exercices, même si cela avait été tout à fait possible, les deux frameworks ayant le même périmètre fonctionnel.
1. « eni_react_bases_01 »
Avant d’envisager de développer des applications ambitieuses, il est important de débuter l’étude des concepts de base de React.
Rappelons que, comme pour Svelte, l’installation du framework Node.js est un prérequis. Vous pourrez vous reporter au chapitre Installation de Node.js pour voir comment assurer son installation.
Il peut aussi être utile, comme pour React, de disposer d’un éditeur de texte du type Microsoft Visual Code, même si des solutions plus basiques pourraient convenir.
L’intérêt est que Microsoft Visual Code est un système ouvert. Il est possible de lui rajouter des extensions, notamment la reconnaissance de la syntaxique de nombreux langages de programmation, notamment JavaScript, Svelte et React.
Pour mettre en place un premier projet React, il faut également se mettre en mode ligne de commande (taper cmd dans le moteur de recherche sous Windows, en bas à gauche de l’écran).
Nous placerons toutes les applications du chapitre dans un répertoire « d:\ENI_React ». Tout autre choix, y compris sur d’autres systèmes d’exploitation comme Linux ou macOS, pourra convenir.
Pour la création du premier projet, saisissez, en mode ligne de commande, l’instruction npx create-react-app eni_react_bases_01 (en étant positionné dans le répertoire « d:\ENI_React »).
Le squelette du projet, généré en quelques secondes, est disponible dans le répertoire « d:\ENI_React\eni_react_bases_01 ». Il convient ensuite, toujours en ligne de commande, de vous placer dans ledit répertoire avec l’instruction cd eni_react_bases_01.
Comme indiqué sur le site officiel (en français) fr.reactjs.org à l’adresse https://fr.reactjs.org/docs/create-a-new-react-app.html, Create React App est un environnement confortable pour apprendre React et constitue la meilleure option pour démarrer une nouvelle application en monopage (Single Page Application) en React.
Attention, Create React App ne prend en charge que la logique « front-end » dans la construction du squelette.
Ensuite, il peut être intéressant, via l’explorateur de fichiers Windows, de regarder la structure de l’ébauche de projet.
Vous découvez une arborescence assez proche de celle vue sous Svelte, avec un répertoire public, un répertoire src, un fichier package.json, un fichier package-lock.json. Tous ces éléments jouent globalement le même rôle que sous Svelte. Petite surprise, le répertoire node_modules est déjà en place, ce qui fait que, contrairement à Svelte, vous n’avez pas besoin de lancer la commande...
Les props React
Dans nos six premières applications, nous avons négligé la notion de props (propriétés) sous React.
Remédions à cela au travers de trois nouveaux exemples.
1. « eni_react_props_01 »
Seul le code du script index.js est commenté.
Dans ce script, deux classes sont présentes :
-
VoitureSport, affichant les caractéristiques (classement, marque et modele) qui décrivent les voitures de sport ayant participé à la célébrissime course automobile des « 24 heures du Mans »,
-
Course, affichant le podium (trois voitures) de l’édition 1970 des « 24 heures du Mans » en utilisant la classe précédente.
Consultons le code complet de ce script :
1. // Importation de classes
2. import React from 'react';
3. import ReactDOM from 'react-dom';
4. import './index.css';
5.
6. // Classe VoitureSport (extension de Component)
7. class VoitureSport extends React.Component {
8.
9. // Méthode render
10. render() {
11.
12. // Valeur de retour
13. return(
14. <div>
15. - Classement {this.props.classement} /
16. Marque : {this.props.marque} /
17. Modèle : {this.props.modele}
18. </div>
19. );
20.
21. }
22.
23. }
24.
25. // Classe Course (extension de Component)
26. class Course extends React.Component {
27.
28. // Méthode render
29. render() {
30.
31. // Valeur de retour
32. return (
33. <div>
34. <h1>Podium 24h du Mans 1970 :</h1>
35. <VoitureSport classement = "1" marque = "Porsche" modele ...
Les librairies tierces pour React
Le framework React doit son succès à ses qualités intrinsèques mais également aux très nombreuses librairies tierces développées par la communauté de ses utilisateurs.
Il est bien sûr impossible d’en faire un inventaire complet.
Nous allons survoler les possibilités offertes par deux d’entre elles :
-
Material-UI : librairie très complète proposant des composants UI (interfaces utilisateur) très évolués.
-
Recharts : librairie intégrant de très nombreux composants permettant de concevoir des graphiques (LineChart, AreaChart, BarChart, PieChart, RadarChart…).
Dans cette section, nous allons recourir à la librairie « Material-UI » pour trois exemples de présentation de données en mode tableau.
La mise en page de données en tableaux est certainement l’une des fonctionnalités parmi les plus utilisées dans les développements web et les applications pour périphériques mobiles.
Vous trouverez ensuite également trois exemples de conception de graphiques sur la base de la librairie « Recharts ».
1. « eni_react_material-ui_table_01 »
Dans les applications web sous React, il est fréquent que l’on souhaite une présentation des données (flux JSON) sous forme de tableau.
La librairie « Material-UI-Table » propose des mises en forme très abouties et ceci sans un trop grand surcroît de complexité.
Nous allons décliner trois exemples (toujours basés sur les voitures de sport) pour découvrir le potentiel de cette librairie assez magique.
L’installation de la librairie « Material-UI » pour la rendre disponible dans un projet React ne pose aucune difficulté. Cette librairie est disponible en tant que package npm (Node Package Manager).
Après avoir créé le projet React (via Create React App), toujours en ligne de commande, réalisez l’installation par la commande npm install @material-ui/core.
Une fois n’est pas coutume, débutons l’exposé sur ce premier exemple d’utilisation de la librairie « Material-UI » par l’affichage du résultat lors de l’exécution.
Le jeu de données est basé sur une liste d’une vingtaine de voitures de sport, jeu d’essai déjà utilisé dans ce livre.
L’exécution du projet affiche ce tableau dans le navigateur :
Passons à l’étude détaillée du code du script index.js.
1. // Importation de classes
2. import React from 'react';
3. import ReactDOM from 'react-dom';
4. import './index.css';
5. import Table from '@material-ui/core/Table';
6. import TableBody from '@material-ui/core/TableBody';
7. import TableCell from '@material-ui/core/TableCell';
8. import TableContainer from '@material-ui/core/TableContainer'; ...
Lecture de fichiers JSON sous React
1. Différents types de flux JSON
Nous connaissons, pour l’avoir déjà vu pour le framework Svelte, l’importance du format JSON dans les développements d’applications pour le Web ainsi que pour les mobiles.
Source Wikipédia : JavaScript Object Notation (JSON) est un format de données textuelles dérivé de la notation des objets du langage JavaScript. Il permet de représenter de l’information de manière structurée, comme le fait aussi XML, par exemple.
Des flux de données JSON peuvent être consommés par React et ces données peuvent être :
-
localisées dans les applications React elles-mêmes (fichiers locaux),
-
ou provenir d’applications tierces (essentiellement Internet).
La production des flux JSON dans ce second cas peut être soit effectuée par des appels à des API (le développeur React se contente de solliciter l’API en lui passant éventuellement des paramètres), soit en appelant un script serveur (qu’il pourra avoir lui-même développé).
Nous allons nous intéresser uniquement aux flux locaux, c’est-à-dire directement embarqués dans l’application.
Nous aurons l’occasion de voir plus loin dans ce livre comment procéder dans le cas de flux distants.
2. « eni_react_lecture_json_local »
Comme annoncé plus avant, l’enjeu est, dans ce développement, de montrer comment accéder à des données JSON provenant d’un script local.
Nous continuons d’utiliser un jeu d’essai déjà employé dans ce livre, une liste de voitures de sport.
Cette application intègre bien plus que le fichier index.js que nous avions rencontré jusqu’à présent.
Nous passerons en revue les scripts suivants :
-
script index.js (à considérer comme le lanceur de l’application).
-
App.js (script contenant une première partie de la logique métier).
-
App.css (script contenant les styles CSS utilisés par App.js).
-
Voitures.js (script contenant la description du composant Voitures et l’affichage des données en format tableau HTML).
-
DonneesVoitures.js (script contenant la liste des voitures au format JSON).
Pour l’instant, tout ceci semble un peu abstrait, mais l’étude du code de chacun de ces fichiers vous permettra de comprendre l’articulation générale et vous devriez ensuite être en mesure d’exploiter un flux JSON quelle qu’en soit la structure.
Comme nous avons pris l’habitude de le faire, nous allons commencer par voir l’affichage obtenu à l’exécution :
L’affichage est relativement conséquent avec 18 voitures, chacune caractérisée par les propriétés habituelles : la marque, le modèle, le type de moteur, la cylindrée en litres du moteur, la puissance réelle et la vitesse de pointe.
Regardons tout d’abord le script donneesVoitures.js contenant nos données au format JSON :
1. // Liste des données
2. export const donneesVoitures = [ ...
Interactions avec un serveur PHP-MySQL
Comme nous l’avons vu dans le chapitre concernant le framework Svelte, il est aussi tout à fait possible de faire interagir le framework React (front-end) avec un serveur de données en back-end, par exemple par l’intermédiaire du couplet PHP-MySQL.
MySQL est l’un des Systèmes de Gestion de Bases de Données parmi les plus utilisés au monde, notamment dans les applications web.
Des statistiques récentes font encore état d’un taux d’utilisation de MySQL à près de 50 % et de PHP à près de 80 % dans les sites web dynamiques, c’est-à-dire couplés à une Base De Données.
Le langage PHP, étroitement lié à MySQL, sera dans notre cas le langage de programmation retenu pour écrire les scripts qui géreront les opérations sur les données. Même si le présent livre n’est pas orienté PHP, quelques éléments syntaxiques vous seront fournis dans les exemples d’illustration à venir.
1. « eni_react_php_mysql_01 »
Dans notre premier exemple, nous nous contenterons d’enregistrer dans un fichier texte (sport_favori.txt) sur le serveur web le choix d’un sport préféré réalisé au travers d’une liste déroulante sous React.
Le serveur web ne sera pas un site distant. Nous utiliserons un serveur Apache installé dans le cadre d’un déploiement local de la suite web EasyPHP. Le script PHP recevant le choix effectué (un sport parmi trois dans une liste déroulante) sera installé dans un sous-répertoire (nommé react) de ce serveur Apache.
L’URL du script sera « http://127.0.0.1/react/php_sport_favori.php ». Le fichier texte « sport_favori.txt » sera généré (création ou écrasement) dans le même répertoire.
À titre indicatif, l’architecture de ce traitement sera assez proche de celles présentées graphiquement dans le chapitre Installation de Node.js.
Notre application est constituée principalement de deux scripts :
-
index.js (script client intégré au développement React)
-
php_sport_favori.php (script serveur écrit en langage PHP)
Débutons notre explication par le commentaire détaillé du script index.js :
1. // Importation de classes
2. import React from 'react';
3. import ReactDOM from 'react-dom';
4. import './index.css';
5.
6. // Class FormulaireSportPrefere (extension de Component)
7. class FormulaireSportPrefere extends React.Component {
8.
9. // Constructeur
10. // NB : Source : https://fr.reactjs.org/docs/
react-component.html#constructor
11. // Le constructeur d'un composant React est appelé ...
La navigation sous React (routage)
Jusqu’à présent, dans ce chapitre, nous avons développé des applications React SPA (Single Page Application). Le moment est venu de voir comment il est possible de chaîner ces applications entre elles au travers d’un système de navigation (router).
Nous aurions pu mettre en place un système de navigation (routage) entre les applications développées dans le cadre de la section Les librairies tierces pour React. Pour simplifier l’exposé, la présentation sera faite au travers d’un projet plus modeste.
Notre application « eni_react_router » a été créée à partir de l’assistant habituel, Create React App.
Elle comprend donc un script index.js par défaut (déjà vu dans de nombreux projets du livre), dans lequel un composant App est installé.
C’est le script App.js, contenant ce composant App, que nous allons étudier en détail. Le code est reproduit dans son intégralité ci-après :
1. // Importation de classes
2. import React from "react";
3. import {
4. BrowserRouter as Router,
5. Switch,
6. Route,
7. Link
8. } from "react-router-dom";
9.
10. // Ce site comporte 3 pages, qui sont toutes affichées
11. // dynamiquement dans le navigateur.
12.
13. // Fonction Routage
14. export default function Routage() {
15.
16. // Valeur de retour
17. return (
18.
19. // Appel du composant Router
20. <Router>
21.
22. <div>
23. {/* Liens vers les différentes pages du site */}
24. <ul>
25. {/* Lien vers la page / */}
26. <li>
27. <Link to="/">Page principale</Link>
28. </li>
29. {/* Lien vers la page /about */} ...