Introduction à React avec TypeScript

Présentation de React

React est une bibliothèque JavaScript développée par Facebook permettant de concevoir des interfaces utilisateur interactives et dynamiques. Son architecture repose sur des composants réutilisables, facilitant ainsi la création et la maintenance d’applications web modernes.

Avantages de React


Mise en place de React avec TypeScript

Vite est un outil de développement moderne permettant d’initialiser rapidement un projet React avec TypeScript.

npm create vite@latest my-react-app --template react-ts
cd my-react-app
npm install
npm run dev

Introduction à JSX

JSX (JavaScript XML) est une extension de syntaxe permettant d’écrire du code HTML au sein de JavaScript. Il est utilisé pour définir l’interface utilisateur dans les composants React.

Exemple de JSX

const element = <h1>Bonjour, monde !</h1>;

Remarque : JSX doit être compilé en JavaScript avant d’être interprété par le navigateur.


Définition d’un composant React

Un composant est une fonction retournant une interface utilisateur en JSX.

Exemple de composant sans TypeScript

const Hello = (props) => {
  return <h1>Hello, {props.name}!</h1>;
};

Ajout du typage avec TypeScript

interface HelloProps {
  name: string;
}

const Hello: React.FC<HelloProps> = ({ name }) => {
  return <h1>Hello, {name}!</h1>;
};

Pourquoi utiliser TypeScript ? Il permet de prévenir les erreurs en définissant précisément les types des propriétés et des états.


Les Props (Propriétés)

Les props permettent de transmettre des données d’un composant parent à un composant enfant.

Exemple de transmission de props

const Greeting: React.FC<{ name: string }> = ({ name }) => {
  return <p>Bonjour, {name} !</p>;
};

const App: React.FC = () => {
  return <Greeting name="Alice" />;
};

Gestion de l’état avec useState

Le state permet de déclarer et de mettre à jour un état local dans un composant.

Exemple : Un compteur

import { useState } from 'react';

const Counter: React.FC = () => {
  const [count, setCount] = useState<number>(0);

  return (
    <div>
      <p>Valeur : {count}</p>
      <button onClick={() => setCount(count + 1)}>Incrémenter</button>
    </div>
  );
};

Bonnes pratiques : Il est recommandé de typer useState afin d’éviter des erreurs liées aux types de données.


Immuabilité du state

En React, il est important de ne pas modifier directement le state, mais d’utiliser des fonctions de mise à jour.

Mauvaise pratique

const [user, setUser] = useState({ name: "Alice", age: 25 });
user.age = 26; // Ne pas modifier directement le state !

Bonne pratique

setUser((prevUser) => ({ ...prevUser, age: 26 }));

Pourquoi ? React repose sur l’immuabilité pour détecter les changements et optimiser les mises à jour.


Gestion des effets de bord avec useEffect

useEffect est utilisé pour effectuer des actions secondaires, telles que des appels API, la gestion d’événements ou des mises à jour de l’UI après un changement d’état.

Exemple : Affichage d’un message lors du montage du composant

import { useEffect } from 'react';

const Message: React.FC = () => {
  useEffect(() => {
      console.log("Composant monté");

      return () => {
        console.log("Composant démonté");
      };
    }, []); // La dépendance vide signifie qu'il ne se déclenche qu'une fois


  return <p>Bienvenue !</p>;
};

Remarque : La dépendance [] indique que l’effet ne s’exécute qu’une seule fois, au premier rendu.


Structure d’un Projet React Moderne

Configurer React avec Vite ou Next.js

Les outils modernes comme Vite et Next.js permettent de configurer rapidement des projets React avec TypeScript.

Conseil : Choisissez Vite pour des applications plus petites et Next.js pour des applications complexes nécessitant des fonctionnalités comme le SSR ou le SSG (Static Site Generation).

Organisation des dossiers (Atomic Design)

L’organisation des dossiers dans un projet React est cruciale pour maintenir la scalabilité et la clarté du code. Le modèle Atomic Design propose de diviser l’interface en petites unités réutilisables.

Conseil : Utilisez l’Atomic Design pour créer des composants réutilisables et éviter la duplication de code.


Gestion des Données

Utilisation de Context API

La Context API de React permet de partager des données à travers l’arbre de composants sans avoir à passer les props à chaque niveau intermédiaire.

Conseil : Utilisez le Context API pour des valeurs globales comme le thème, l’authentification ou les préférences utilisateur.

Introduction à Redux Toolkit ou Zustand

Conseil : Redux Toolkit simplifie l’utilisation de Redux, surtout lorsqu’il s’agit de la gestion d’état complexe ou de grande échelle.

Conseil : Zustand est plus léger et plus facile à utiliser que Redux pour des applications plus petites ou des projets avec des exigences moins complexes en gestion d’état.