Ce projet de gestion des stagiaires utilise ReactJS pour offrir une interface utilisateur dynamique et réactive. Il permet aux administrateurs d'ajouter, de modifier, de supprimer et d'afficher les informations des stagiaires de manière efficace. Grâce à une structure modulaire, le projet est facilement extensible et maintenable.
Pour démarrer le projet, utilisez l'outil create-react-app pour initialiser votre application React. Ensuite, installez les dépendances nécessaires telles que react-router-dom et axios pour le routage et les requêtes HTTP.
npx create-react-app gestion-des-stagiaires
cd gestion-des-stagiaires
npm install react-router-dom axios
Une organisation claire des dossiers facilite la navigation et la maintenance du projet. Voici une structure recommandée :
| Dossier/Fichier | Description |
|---|---|
public/ |
Contient les fichiers publics tels que index.html. |
src/ |
Contient le code source de l'application. |
src/components/ |
Composants réutilisables de l'application. |
src/services/ |
Services pour les appels API et la gestion des données. |
src/pages/ |
Pages principales de l'application. |
src/App.js |
Composant principal de l'application. |
Le composant App.js sert de point d'entrée à l'application. Il gère l'état global des stagiaires et intègre les différents composants.
// src/App.js
import React, { useState, useEffect } from 'react';
import { BrowserRouter as Router, Routes, Route } from 'react-router-dom';
import StagiaireList from './components/StagiaireList';
import StagiaireForm from './components/StagiaireForm';
import Navigation from './components/Navigation';
function App() {
const [stagiaires, setStagiaires] = useState([]);
useEffect(() => {
// Charger les stagiaires depuis une API ou un fichier local
const initialStagiaires = [
{ id: 1, nom: 'John Doe', email: 'john@example.com' },
{ id: 2, nom: 'Jane Smith', email: 'jane@example.com' },
];
setStagiaires(initialStagiaires);
}, []);
const ajouterStagiaire = (nouveauStagiaire) => {
setStagiaires([...stagiaires, { id: Date.now(), ...nouveauStagiaire }]);
};
const supprimerStagiaire = (id) => {
setStagiaires(stagiaires.filter(stagiaire => stagiaire.id !== id));
};
const modifierStagiaire = (id, stagiaireModifie) => {
setStagiaires(stagiaires.map(stagiaire =>
stagiaire.id === id ? { ...stagiaire, ...stagiaireModifie } : stagiaire
));
};
return (
<Router>
<Navigation />
<Routes>
<Route path="/" element={
<div className="container">
<h1>Gestion des Stagiaires</h1>
<StagiaireForm ajouterStagiaire={ajouterStagiaire} />
<StagiaireList
stagiaires={stagiaires}
supprimerStagiaire={supprimerStagiaire}
modifierStagiaire={modifierStagiaire}
/>
</div>
} />
{/* Ajouter d'autres routes si nécessaire */}
</Routes>
</Router>
);
}
export default App;
Le composant Navigation.js gère la barre de navigation de l'application, permettant de naviguer entre différentes pages.
// src/components/Navigation.js
import React from 'react';
import { Link } from 'react-router-dom';
function Navigation() {
return (
<nav>
<ul>
<li><Link to="/">Accueil</Link></li>
<li><Link to="/ajouter">Ajouter Stagiaire</Link></li>
<li><Link to="/liste">Liste des Stagiaires</Link></li>
</ul>
</nav>
);
}
export default Navigation;
Ce composant permet d'ajouter de nouveaux stagiaires via un formulaire simple.
// src/components/StagiaireForm.js
import React, { useState } from 'react';
function StagiaireForm({ ajouterStagiaire }) {
const [nom, setNom] = useState('');
const [email, setEmail] = useState('');
const handleSubmit = (e) => {
e.preventDefault();
if (nom && email) {
ajouterStagiaire({ nom, email });
setNom('');
setEmail('');
}
};
return (
<form onSubmit={handleSubmit}>
<input
type="text"
value={nom}
onChange={(e) => setNom(e.target.value)}
placeholder="Nom"
required
/>
<input
type="email"
value={email}
onChange={(e) => setEmail(e.target.value)}
placeholder="Email"
required
/>
<button type="submit">Ajouter</button>
</form>
);
}
export default StagiaireForm;
Ce composant affiche la liste des stagiaires et permet de supprimer ou de modifier leurs informations.
// src/components/StagiaireList.js
import React from 'react';
function StagiaireList({ stagiaires, supprimerStagiaire, modifierStagiaire }) {
return (
<div>
<h2>Liste des Stagiaires</h2>
{stagiaires.length === 0 ? (
<p>Aucun stagiaire n'est inscrit.</p>
) : (
<table>
<thead>
<tr>
<th>ID</th>
<th>Nom</th>
<th>Email</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
{stagiaires.map((stagiaire) => (
<tr key={stagiaire.id}>
<td>{stagiaire.id}</td>
<td>{stagiaire.nom}</td>
<td>{stagiaire.email}</td>
<td>
<button onClick={() => supprimerStagiaire(stagiaire.id)}>Supprimer</button>
<button onClick={() => modifierStagiaire(stagiaire.id, { nom: 'Nouveau Nom', email: 'nouveau@example.com' })}>Modifier</button>
</td>
</tr>
))}
</tbody>
</table>
)}
</div>
);
}
export default StagiaireList;
Les services facilitent la communication avec une API backend pour la gestion des données des stagiaires.
// src/services/stagiairesService.js
import axios from 'axios';
const API_URL = 'http://votre-api.com/stagiaires';
export const getStagiaires = async () => {
try {
const reponse = await axios.get(API_URL);
return reponse.data;
} catch (erreur) {
console.error("Erreur lors de la récupération des stagiaires", erreur);
throw erreur;
}
};
export const ajouterStagiaire = async (stagiaire) => {
try {
const reponse = await axios.post(API_URL, stagiaire);
return reponse.data;
} catch (erreur) {
console.error("Erreur lors de l'ajout du stagiaire", erreur);
throw erreur;
}
};
Un style cohérent améliore l'expérience utilisateur. Voici un exemple de fichier CSS pour styliser l'application.
/* src/styles.css */
body {
font-family: Arial, sans-serif;
background-color: #f7f7f7;
margin: 0;
padding: 20px;
}
.container {
max-width: 800px;
margin: auto;
background: #fff;
padding: 20px;
border-radius: 8px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
}
h1, h2 {
text-align: center;
}
nav ul {
list-style-type: none;
padding: 0;
display: flex;
justify-content: center;
background-color: #333;
}
nav ul li {
margin: 0 15px;
}
nav ul li a {
color: white;
text-decoration: none;
padding: 14px 20px;
display: block;
}
nav ul li a:hover {
background-color: #575757;
}
form {
margin-bottom: 20px;
}
form > input {
margin-right: 10px;
padding: 5px;
border: 1px solid #ccc;
border-radius: 4px;
}
button {
background-color: #28a745;
color: #fff;
border: none;
padding: 7px 15px;
border-radius: 4px;
cursor: pointer;
}
button:hover {
background-color: #218838;
}
table {
width: 100%;
border-collapse: collapse;
}
table, th, td {
border: 1px solid #ddd;
}
th, td {
padding: 10px;
text-align: center;
}
Après avoir configuré le projet et développé les composants nécessaires, suivez ces étapes pour lancer l'application :
# Installer les dépendances
npm install
# Démarrer le serveur de développement
npm start
L'application sera accessible à l'adresse http://localhost:3000. Vous pouvez maintenant interagir avec votre gestionnaire de stagiaires.
Pour sécuriser votre application, implémentez une authentification utilisateur. Vous pouvez utiliser des bibliothèques comme jsonwebtoken pour gérer les tokens d'authentification.
Assurez-vous que les données saisies par les utilisateurs sont valides en ajoutant des validations aux formulaires. Utilisez des bibliothèques comme Formik et Yup pour simplifier ce processus.
Pour des projets plus complexes, utilisez Redux pour une gestion d'état efficace. Cela permet de centraliser et de gérer l'état de l'application de manière prévisible.
Assurez-vous que votre application est responsive et s'adapte à différentes tailles d'écran. Utilisez des frameworks CSS comme Bootstrap ou Tailwind CSS pour faciliter la création de mises en page réactives.
Pour stocker et récupérer les données des stagiaires de manière persistante, intégrez votre application avec une base de données via une API RESTful. Utilisez des outils comme Express.js et MongoDB pour créer votre backend.
La création d'un projet de gestion des stagiaires avec ReactJS offre une solution flexible et puissante pour gérer efficacement les informations des stagiaires. Grâce à une structure modulaire, des composants réutilisables et une intégration facile avec des API, ce projet peut être adapté et étendu pour répondre aux besoins spécifiques de toute organisation. En implémentant des fonctionnalités avancées telles que l'authentification, la validation des formulaires et la gestion d'état avancée, vous pouvez améliorer considérablement l'expérience utilisateur et la performance de votre application.