@react-modernizerMigre class components vers function + hooks
Maifady est un plugin Claude Code 100% gratuit avec 30 agents IA — @react-modernizer migre tes class components React vers function + hooks, transforme les HOC en custom hooks, remplace les APIs dépréciées (componentWillMount, refs strings, vieux context API) — un composant à la fois, comportement préservé, tests verts.
Le problème qu'il résout
Tu reprends un projet React de 2019. Plein de class extends React.Component, des componentDidMount, des this.refs.input, et des HOC qui empilent 5 wrappers. Tu veux moderniser, mais tu sais que la migration naïve casse des trucs subtils (timing de useEffect vs componentDidMount, par exemple).
@react-modernizer migre un composant à la fois et flag les changements de comportement subtils.
Comment il bosse
- Lit le composant cible + ses tests.
- Identifie state, lifecycle, props API, contrats avec children.
- Migre UN composant à la fois.
- Mapping :
this.state→useState(un hook par concern, pas un seul giant),componentDidMount→useEffect([], ...),componentWillUnmount→ return cleanup,this.refs→useRef, ancien context →useContext. - Note les subtle behavior changes (
useEffectruns after paint, contrairement àcomponentDidMountqui runs avant). - Vérifie que les tests passent après chaque migration.
Exemple concret
Tu tapes
›@react-modernizer migre src/components/Dashboard.tsx (Class) vers function + hooks. Préserve l'API publique (props). Tests doivent rester verts.
Tu obtiens
## Avant : Class component, 187 lignes ## Après : Function + hooks, 124 lignes ## Mapping - this.state.user → useState<User | null> - this.state.loading → useState<boolean> - this.state.error → useState<Error | null> - componentDidMount → useEffect([], fetchUser) - componentDidUpdate(prev) → useEffect([userId], fetchUser) - componentWillUnmount → cleanup in useEffect - this.refs.searchInput → useRef<HTMLInputElement> - this.context (ThemeContext) → useContext(ThemeContext) ## Subtle behavior changes - useEffect runs AFTER paint (vs componentDidMount BEFORE). Impact ici : aucun (pas de DOM manipulation pre-paint). ## Tests : 12/12 passing ✓
Pourquoi tu vas l'aimer
Un composant à la fois
Pas de big-bang. Commit entre chaque. Si quelque chose pète, tu sais quoi rollback.
API publique préservée
Les props restent les mêmes. Les imports du composant ne changent pas.
Hooks par concern
Pas un seul useState géant. Plusieurs useState, un par responsibility.
Flag les surprises
useEffect ≠ componentDidMount. L'agent te dit quand c'est important.
Quand l'utiliser
✅ Idéal pour
- Projet React legacy avec class components
- Migration progressive d'une codebase
- Composant que tu vas modifier de toute façon (refactor + migration)
⚠️ Pas adapté quand
- Composant à problèmes d'archi → @refactor-assistant
- Audit accessibilité au passage → @accessibility-auditor
- Pas de tests, code en prod critique — ajoute des tests d'abord
Combine avec ces agents
Questions fréquentes
Migre-t-il les HOC ?
Oui quand c'est sensé : un HOC qui ajoute juste du state / behavior devient un custom hook. Si le HOC fait du styling, il reste tel quel.
Et les class components avec methods complexes ?
Les methods deviennent des fonctions inline (ou useCallback si stabilité de référence nécessaire). L'agent justifie chaque useCallback / useMemo qu'il introduit.