Loupe

Premiers pas avec React.js - Partie 1

I - Qu’est-ce que React.js ?

A - Présentation

React.js est une bibliothĂšque Javascript libre dĂ©veloppĂ©e par Facebook depuis 2013. Cette bibliothĂšque permet via un systĂšme de composants de gĂ©nĂ©rer une portion ou une page en HTML Ă  chaque changement d’état. Il s’agit lĂ  de faciliter la crĂ©ation d’applications web Monopage.

React.js gĂšre simplement la partie interface (Vue) d’une application web. En effet, React est connu pour ĂȘtre rapide, les applications faites en React peuvent gĂ©rer des mises Ă  jour complexes tout en restant rapides et rĂ©actives. Il reste Ă©galement modulaire, au lieu d’écrire de gros fichiers de code denses on peut Ă©crire beaucoup de petits fichiers rĂ©utilisables. La modularitĂ© de React reste une bonne solution aux problĂšmes de maintenabilitĂ© de JavaScript.

 B - JSX

React.js utilise JSX pour le rendu de ses composants. Cette extension syntaxique de Javascript comporte plusieurs diffĂ©rences avec le HTML bien qu’elle s’en rapproche.

Cependant, on doit avoir un compilateur JSX pour traduire n’importe quel code JSX en JavaScript.

1
const title = <h1>Hello World</h1>

 ReactDOM est une bibliothĂšque Javascript qui contient plusieurs mĂ©thodes spĂ©cifiques Ă  React et qui traitent le DOM d'une maniĂšre ou d'une autre.
ReactDOM.render() est le moyen le plus commun pour effectuer le rendu d’un Ă©lĂ©ment JSX. Il prend l’expression JSX et crĂ©Ă© un arbre correspondant  aux noeuds du DOM puis il ajoute cet arbre au DOM.

C - Virtual DOM

Avec React.js, pour chaque objet DOM, il y a un "objet DOM virtuel" correspondant. Un objet DOM virtuel est une représentation d'un objet DOM, comme une copie allégée.

Un objet DOM virtuel a les mĂȘmes propriĂ©tĂ©s qu'un objet DOM rĂ©el, mais il n'a pas le pouvoir de changer directement ce qui est Ă  l'Ă©cran. Entre deux mises Ă  jour, React va donc comparer l'ancien et le nouveau DOM Virtuel pour dĂ©terminer oĂč effectuer d'Ă©ventuels changements.

Suite Ă  ça donc, React.js va cibler les noeuds du DOM oĂč des modifications doivent ĂȘtre faites et les appliquer. Ce principe va limiter les calculs dans notre page et donc se traduire par des applications plus rapides.

II - Installation et mise en route

A - Node & NPM

Pour pouvoir configurer votre Projet React.js vous aurez besoin d’installer Node.js sur votre ordinateur en suivant ce lien. En faisant ça, vous aurez accĂšs Ă  Node Package Manager (NPM). NPM est le gestionnaire de paquets officiel de Node.js et il vous permettra de pouvoir installer au sein de votre projet des Packages (BibliothĂšque Javascript).

Vous trouverez toute la liste des packages disponibles sur https://www.npmjs.com/.

Pour commencer, dĂ©cidez oĂč vous voulez enregistrer votre application. Dans le terminal, cd oĂč vous voulez enregistrer votre application. Utilisez mkdir pour crĂ©er un nouveau rĂ©pertoire avec le nom de votre application. cd dans votre nouveau rĂ©pertoire.

Ensuite on va utiliser la commande

1
npm init


Cette commande va créer automatiquement un nouveau fichier nommé package.json qui contient des métadonnées sur votre nouveau projet comme ses dépendances ou les scripts d'exécution.

Dans le package.json, les dĂ©pendances servent Ă  remplir diffĂ©rents objectifs. Certaines dĂ©pendances sont nĂ©cessaires pour construire votre projet Ă  savoir celles dont vous avez besoin pour faire tourner votre code, d’autres sont nĂ©cessaire lorsque votre programme s’exĂ©cute, c’est Ă  dire celles dont vous aurez besoin Ă  un moment ou Ă  un autre lors de la phase de dĂ©veloppement, mais pas pour l'exĂ©cution du code.  Ainsi, il existe plusieurs types de dĂ©pendances que vous pouvez avoir par exemple dependencies qui va regroupes les dĂ©pendances nĂ©cessaires pour faire tourner le code. Ensuite nous avons devDependencies qui va lui regrouper les dĂ©pendances auxquelles nous auront Ă  faire appel lors des diffĂ©rentes phases de dĂ©veloppement mais non pour l'exĂ©cution du code. 

1
2
3
4
5
6
7
8
{
    â€œdependencies”: {
        â€œpackage_1”: “^1.0.0”
 },
       â€œdevDependencies”: {
          â€œpackage_2: “^1.2.1”
 }
}

Enfin, on installe nos deux modules « react » et « react-dom »:

1
npm install  --save react react-dom

B - Babel

Babel est un compilateur JavaScript qui inclut la possibilité de compiler JSX en JavaScript normal.

Le nom du module npm de Babel est babel-core. Au lieu de npm install --save babel-core on utilisera la syntaxe npm install --save-dev babel-core, parce que vous n'utiliserez Babel qu'en mode développement.

Vous allez également installer deux autres modules liés à Babel, nommés babel-loader et babel-preset-react :

1
npm install --save-dev babel-core babel-loader babel-preset-react

Pour que babel fonctionne vous devez Ă©crire un fichier de configuration de babel.

Dans votre répertoire racine, créez un nouveau fichier nommé .babelrc .
Puis enregistrer le code suivant dans votre fichier .babelrc :

1
{ presets: [react] }

C - Webpack

Webpack est un “Module Bundler” qui a pour but de prendre tous les fichiers Javascript, CSS ou HTML et de les regrouper dans un ou plusieurs modules pour palier Ă  la modularitĂ© du Javascript. Webpack va faire appel Ă  des loaders (ex: Babel) qui vont gĂ©rer chaque aspect de l’application pour les compiler directement en Javascript interprĂ©table par le navigateur.

Pour faire court, Webpack agit en tant qu'harmoniseur en transformant le code hétérogÚne en code natif et statique directement compréhensible par le navigateur.

Dans notre cas, nous devons configurer webpack pour que notre app utilise Babel afin de compiler et de donner un chemin Ă  notre fichier bundle.js

Afin de configurer Webpack nous allons commencer par installer le Package dans notre projet :

1
npm install --save webpack webpack-dev-server webpack-cli

Webpack-dev-server nous sera utile pour lancer un serveur web de dĂ©veloppement qui nous permettra d’utiliser des outils comme le hot reload.

Webpack-CLI (Command Line Interface) quant à lui est l’interface en ligne de commande de Webpack.

Il est maintenant temps de créer notre fichier index.html à la racine de notre projet.

1
2
3
4
5
6
7
8
9
10
<!DOCTYPE html>
<html>
   <head>
       <title> Premier composant React </title>
   </head>
   <body>
       <div id="app"></div>
       <script type="text/javascript" src="/bundle.js"></script>
   </body>
</html>

Dans ce fichier, nous retrouvons une div avec l’id “app” qui sera l’endroit oĂč notre code sera injectĂ©.

Pour finir la configuration du projet, nous allons maintenant crĂ©er un fichier index.js qui sera le point d’entrĂ©e de notre configuration Webpack. CrĂ©ez un dossier src dans lequel vous placerez ce fichier.

A la racine, créez le fichier index.js :

1
2
3
4
5
6
7
8
import React from 'react';
 
import ReactDOM from 'react-dom';
 
// main app
import App from './components/App';
 
ReactDOM.render(<App />, document.getElementById('app'))

Dans ce fichier, nous importons react et react-dom.  Nous importons aussi notre composant App que nous crĂ©erons juste aprĂšs. Pour finir, nous effectuons le rendu dans notre node principal situĂ© dans le fichier index.html prĂ©cĂ©demment crĂ©Ă©.

A prĂ©sent,, il nous faut crĂ©er un dossier “webpack” dans lequel nous crĂ©erons un fichier “webpack.dev.config.js” :

1
2
3
4
5
6
7
8
var webpack = require('webpack');
var path = require('path');
 
module.exports = {
    entry: [
        path.join(__dirname, '../index.js')
    ]
}

 Ensuite, nous ajouterons des loaders qui auront pour but de compiler nos fichiers source :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
var webpack = require('webpack');
var path = require('path');
 
var parentDir = path.join(__dirname, '../');
 
module.exports = {
    entry: [
        path.join(parentDir, 'index.js')
    ],
    module: {
        rules: [
        {
            test: /\.(js|jsx)$/,
                exclude: /node_modules/,
                use:{
                    loader: 'babel-loader',
                    options:{
                        presets: ['babel-preset-react']
                    }
                }
            }
        ]
     
},
    output: {
        path: parentDir + '/dist',
        filename: 'bundle.js'
    },
    devServer: {
        contentBase: parentDir,
        historyApiFallback: true
    }
}

A travers ces quelques lignes, nous configurons babel-loader pour charger les fichiers js/jsx grĂące aux loaders. Ensuite, nous configurons webpack pour qu’il sache oĂč placer le fichier bundle.js (cf output). La derniĂšre Ă©tape de la configuration de webpack est de lui spĂ©cifier les options relatives Ă  notre serveur de dev (cf devServer).

Il est maintenant temps de créer notre premier composant React !

Ajoutez un dossier “components” à votre projet et dans celui-ci, ajoutez un fichier App.js.

Pour ce premier exemple, nous allons simplement crĂ©er un composant qui affichera “Hello World !” :

1
2
3
4
5
6
7
8
import React, {Component} from 'react';
 
 
export default class App extends Component {
   render () {
       return <p>Hello World !</p>
   }
}

 Dans ce fichier nous commençons par importer React et Component depuis le package 'react'. Ensuite, nous exportons notre composant App. Afin de pouvoir afficher notre message, nous utilisons la mĂ©thode render() qui est automatiquement appelĂ©e dans react et qui va retourner le jsx affichant Hello World.

Avant de pouvoir tester notre App dans le navigateur, nous allons ajouter un script npm qui nous permettra de lancer le serveur de dev en entrant simplement la commande ‘npm run dev’ dans notre terminal.

Dans votre fichier package.json, ajoutez simplement les lignes suivantes :

1
2
3
4
5
6
7
"scripts": {
 
 "test": "echo \"Error: no test specified\" && exit 1",
 
 "dev": "./node_modules/.bin/webpack-dev-server --config ./webpack/webpack.dev.config.js"
 
}

Il est maintenant temps de tester notre application !

Dans votre terminal, rentrez le commande précédemment créée :

1
npm run dev


Ensuite rendez vous sur
http://localhost:8080 et TADA ! Notre message s’affiche bien !

D - Create-react-app

Pour ceux préférant ne pas passer trop de temps à configurer leur projet, Facebook a mis à disposition une commande qui permet de pouvoir créer son projet React sans passer par la configuration de Webpack ainsi que de Babel qui seront directement pré-configurés. Ainsi vous pourrez directement vous concentrer sur votre projet !

1
npx create-react-app my-app

 

Ces billets pourraient aussi vous intéresser

Vous nous direz ?!

Commentaires