OUJOOD.COM
Introduction
Dans ce tutoriel, nous allons explorer comment utiliser TypeScript avec React. TypeScript est un sur-ensemble de JavaScript qui ajoute des types statiques, ce qui permet de détecter les erreurs au moment de la compilation et d'améliorer la qualité et la maintenabilité du code. Nous verrons comment configurer TypeScript dans un projet React, comment typer les props et l'état, et comment utiliser TypeScript avec des hooks.
Configuration de TypeScript avec React
Si vous utilisez Create React App, vous pouvez facilement configurer TypeScript en créant un nouveau projet avec le modèle TypeScript :
npx create-react-app mon-projet --template typescript
Si vous avez un projet React existant, vous pouvez ajouter TypeScript en installant les dépendances nécessaires :
npm install --save typescript @types/react @types/react-dom
Ensuite, renommez vos fichiers .js
en .tsx
pour activer TypeScript.
Typage des props avec TypeScript
TypeScript permet de typer les props d'un composant React pour s'assurer que les bonnes données sont passées. Voici un exemple :
import React from 'react'; interface UserProps { name: string; age: number; isActive?: boolean; // Le point d'interrogation indique que la prop est optionnelle } function User({ name, age, isActive = true }: UserProps) { return ( <div> <h1>{name}</h1> <p>Âge : {age}</p> <p>Statut : {isActive ? 'Actif' : 'Inactif'}</p> </div> ); } export default User;
Explication du code :
- interface UserProps : Définit les types des props du composant
User
. - name : Une chaîne de caractères obligatoire.
- age : Un nombre obligatoire.
- isActive : Un booléen optionnel avec une valeur par défaut de
true
.
Typage de l'état avec useState
TypeScript permet également de typer l'état d'un composant. Voici un exemple avec le hook useState
:
import React, { useState } from 'react'; function Counter() { const [count, setCount] = useState<number>(0); const increment = () => { setCount(prevCount => prevCount + 1); }; return ( <div> <h1>Compteur : {count}</h1> <button onClick={increment}>Incémenter</button> </div> ); } export default Counter;
Explication du code :
- useState<number> : Type l'état
count
comme un nombre. - setCount : Une fonction qui met à jour l'état
count
.
Typage des événements
TypeScript permet de typer les événements, comme les clics ou les changements d'entrée. Voici un exemple :
import React, { useState } from 'react'; function InputField() { const [value, setValue] = useState<string>(''); const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => { setValue(event.target.value); }; return ( <div> <input type="text" value={value} onChange={handleChange} /> <p>Valeur saisie : {value}</p> </div> ); } export default InputField;
Explication du code :
- React.ChangeEvent<HTMLInputElement> : Type l'événement de changement pour un élément d'entrée.
- event.target.value : La valeur saisie dans l'input, typée comme une chaîne de caractères.
Utilisation de TypeScript avec les hooks personnalisés
Vous pouvez également utiliser TypeScript pour typer les hooks personnalisés. Voici un exemple :
import { useState } from 'react'; function useToggle(initialValue: boolean = false): [boolean, () => void] { const [value, setValue] = useState<boolean>(initialValue); const toggle = () => setValue(prevValue => !prevValue); return [value, toggle]; } export default useToggle;
Explication du code :
- useToggle : Un hook personnalisé qui retourne un état booléen et une fonction pour le basculer.
- initialValue : Une valeur booléenne optionnelle avec une valeur par défaut de
false
. - toggle : Une fonction qui inverse l'état booléen.
Conclusion
Vous avez maintenant une solide compréhension de l'utilisation de TypeScript avec React. Que ce soit pour typer les props, l'état, les événements ou les hooks personnalisés, TypeScript vous permet d'améliorer la qualité et la maintenabilité de votre code en détectant les erreurs au moment de la compilation.
Pour continuer votre apprentissage, découvrez comment déployer vos applications React dans le chapitre suivant : Déploiement d'Applications React.