Workflow avec l'IA
L'intelligence artificielle est devenue un outil courant en developpement web. Comme tout outil, il faut savoir l'utiliser correctement.
Philosophie
L'IA est un pair programmer, pas un pilote automatique.
Vous restez le developpeur. L'IA vous assiste et accelere votre travail, mais c'est vous qui prenez les decisions et validez le code.
L'IA comme outil de developpement
Quand utiliser l'IA
Situations ou l'IA est utile :
- Expliquer des concepts React que vous ne comprenez pas
- Generer du code boilerplate (structure de base)
- Suggerer des solutions a des problemes specifiques
- Deboguer des erreurs avec des messages d'erreur precis
- Refactorer du code pour ameliorer la lisibilite
- Proposer des alternatives a votre approche
Situations ou l'IA peut vous induire en erreur :
- Code de securite (authentification, validation)
- Optimisations de performance critiques
- Choix d'architecture majeurs
- Solutions sans contexte de votre projet
Quand consulter la documentation officielle
L'IA est entrainee sur des donnees passees. La documentation officielle est toujours a jour.
Attention
Consultez la documentation pour :
- Les API officielles de React, Vite, etc.
- Les hooks et leurs regles d'utilisation
- Les features recentes (< 6 mois)
- Les breaking changes entre versions
- Les best practices officielles
Quand devez-vous consulter la documentation officielle plutot que l'IA ?
Comment prompter efficacement
Mauvais prompts
Trop vague :
"Cree-moi un formulaire"
L'IA ne sait pas quels champs, quelle validation, quel style...
Sans contexte :
"Pourquoi ca ne marche pas ?"
L'IA ne connait pas votre code, votre erreur, votre environnement...
Trop ambitieux :
"Cree-moi une application complete de e-commerce"
Trop complexe, resultat generique et inutilisable.
Bons prompts
Specifique et detaille :
Cree un composant React de formulaire d'inscription avec :
- Champs : email, password, confirmPassword
- Validation :
* Email doit etre un format valide
* Password minimum 8 caracteres
* Les deux passwords doivent correspondre
- Affiche les erreurs sous chaque champ
- Bouton desactive tant que le formulaire n'est pas valide
- Utilise useState pour gerer l'etat
Avec le contexte :
J'ai un composant UserList qui fetch des utilisateurs avec useEffect.
Je veux ajouter :
- Un etat de chargement (loading)
- Une gestion d'erreur (error)
- Un affichage conditionnel selon l'etat
Voici mon code actuel :
[coller le code]
Progressif et cible :
Etape 1 : Cree d'abord la structure du composant ProductCard
Etape 2 : Ensuite on ajoutera l'interaction
Qu'est-ce qui fait un bon prompt pour generer du code React ?
Le workflow en 6 etapes
1. Definir le probleme clairement
Avant de demander a l'IA, ecrivez ce que vous voulez accomplir.
Objectif : Creer un hook custom useFetch qui :
- Prend une URL en parametre
- Retourne { data, loading, error }
- Gere les etats de chargement et erreur
- Utilise useEffect pour le fetch
2. Demander l'approche avant le code
Prompt : "Comment structurerais-tu un custom hook useFetch ?
Explique l'approche sans donner le code complet."
Pourquoi ? Vous comprenez la logique avant de voir le code.
3. Obtenir le code
Prompt : "Maintenant, implemente le hook useFetch avec l'approche
que tu as decrite."
4. Revoir le code ligne par ligne
Ne copiez JAMAIS sans comprendre
Pour chaque ligne de code genere, demandez-vous :
- Qu'est-ce que cette ligne fait ?
- Pourquoi est-elle necessaire ?
- Quelles sont les alternatives ?
5. Poser des questions
"Pourquoi utilises-tu un tableau vide [] comme dependance de useEffect ?"
"Qu'est-ce qui se passe si l'URL change ?"
"Pourquoi initialiser data a null plutot qu'a un tableau vide ?"
6. Tester et iterer
// Testez avec differents cas
useFetch('/api/users') // OK
useFetch('invalid-url') // Erreur ?
useFetch(null) // Bug ?
Si quelque chose ne va pas, retournez vers l'IA avec le feedback :
"Le hook fonctionne bien, mais il ne gere pas le cas ou l'URL
est null. Comment modifier pour gerer ce cas ?"
Quelle est la premiere etape du workflow avec l'IA ?
Red Flags : quand se mefier
Signaux d'alarme
Si l'IA genere du code avec ces patterns, verifiez doublement :
1. Class Components
// ❌ Pattern obsolete
class MyComponent extends React.Component {
// ...
}
// ✅ Utilisez les function components
function MyComponent() {
// ...
}
2. Mutation directe de l'etat
// ❌ DANGER !
const addItem = (item) => {
items.push(item); // Mutation !
setItems(items);
};
// ✅ Creez un nouveau tableau
const addItem = (item) => {
setItems([...items, item]);
};
3. var au lieu de const/let
// ❌ Obsolete
var count = 0;
// ✅ Utilisez const ou let
const count = 0;
4. Logique de securite cote client
// ❌ JAMAIS !
if (password === 'admin123') {
setIsAuthenticated(true);
}
// ✅ Authentification cote serveur
const response = await fetch('/api/login', {
method: 'POST',
body: JSON.stringify({ email, password })
});
Verifier les suggestions de l'IA
Checklist de validation
Avant d'utiliser du code genere par l'IA :
Comprehension
- [ ] Je comprends chaque ligne de code
- [ ] Je peux expliquer ce que fait ce code a quelqu'un
- [ ] Je sais pourquoi cette approche a ete choisie
Bonnes pratiques React
- [ ] Utilise des function components (pas des classes)
- [ ] Les hooks suivent les regles (pas dans des conditions/boucles)
- [ ] Pas de mutation d'etat directe
- [ ] Les dependances de useEffect sont correctes
- [ ] Les keys sont presentes sur les listes
JavaScript
- [ ] const/let (pas de var)
- [ ] Arrow functions quand approprie
- [ ] Destructuration utilisee
- [ ] Template literals pour les strings
Que devez-vous faire si vous ne comprenez pas une ligne de code genere par l'IA ?
Ameliorer progressivement
L'IA peut vous aider a ameliorer du code existant de maniere iterative.
Iteration 1 : Code fonctionnel
function UserList() {
const [users, setUsers] = useState([]);
useEffect(() => {
fetch('/api/users')
.then(res => res.json())
.then(data => setUsers(data));
}, []);
return (
<ul>
{users.map(user => <li key={user.id}>{user.name}</li>)}
</ul>
);
}
Prompt : "Ce code fonctionne mais il manque la gestion d'erreur et de chargement. Ameliore-le."
Iteration 2 : Avec gestion d'etat
function UserList() {
const [users, setUsers] = useState([]);
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);
useEffect(() => {
fetch('/api/users')
.then(res => res.json())
.then(data => {
setUsers(data);
setLoading(false);
})
.catch(err => {
setError(err.message);
setLoading(false);
});
}, []);
if (loading) return <p>Chargement...</p>;
if (error) return <p>Erreur : {error}</p>;
return (
<ul>
{users.map(user => <li key={user.id}>{user.name}</li>)}
</ul>
);
}
Prompt : "Maintenant extrait la logique de fetch dans un custom hook useFetch"
Iteration 3 : Avec custom hook
function useFetch(url) {
const [data, setData] = useState(null);
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);
useEffect(() => {
setLoading(true);
fetch(url)
.then(res => res.json())
.then(data => {
setData(data);
setLoading(false);
})
.catch(err => {
setError(err.message);
setLoading(false);
});
}, [url]);
return { data, loading, error };
}
function UserList() {
const { data: users, loading, error } = useFetch('/api/users');
if (loading) return <p>Chargement...</p>;
if (error) return <p>Erreur : {error}</p>;
return (
<ul>
{users?.map(user => <li key={user.id}>{user.name}</li>)}
</ul>
);
}
Succès
Resultat : Code reutilisable et bien structure, obtenu en 3 iterations progressives !
Exercice pratique
Mise en pratique
Essayez cet exercice pour pratiquer le workflow avec l'IA :
Objectif : Creer un composant TodoList avec l'aide de l'IA
Etapes :
- Ecrivez d'abord les specifications (ce que doit faire le composant)
- Demandez a l'IA d'expliquer l'approche
- Demandez le code
- Reviewez ligne par ligne
- Posez des questions sur ce que vous ne comprenez pas
- Testez
- Demandez des ameliorations
Specifications :
- Afficher une liste de taches
- Ajouter une nouvelle tache
- Marquer une tache comme terminee
- Supprimer une tache
- Utiliser useState pour l'etat
- Persister dans localStorage
Recapitulatif
Points cles
- L'IA est un assistant, pas un remplacement du developpeur
- Ecrivez des prompts specifiques avec contexte
- Reviewez le code ligne par ligne avant de l'utiliser
- Consultez la documentation officielle pour les API et features recentes
- Ameliorez le code par iterations progressives
- Ne copiez jamais du code que vous ne comprenez pas