Matrice de compatibilité des dépendances React
Versions minimales requises pour la compatibilité avec React 18.3.1 et React 19.
Utilisez cette skill lors de la vérification si une dépendance supporte une version cible de React, de la résolution de conflits de peer dependencies, du choix entre une mise à jour ou l'utilisation de legacy-peer-deps, ou de l'évaluation du risque d'une migration react-router v5 vers v6.
Consultez cette matrice avant d'exécuter npm install lors d'une mise à jour React et avant d'accepter une résolution de conflit de dépendance npm, en particulier où la compatibilité du mode concurrent peut être affectée.
Core Upgrade Targets
| Package | React 17 (current) | React 18.3.1 (min) | React 19 (min) | Notes |
|---|---|---|---|---|
react |
17.x | 18.3.1 | 19.0.0 | Épinglez exactement à 18.3.1 pour l'orchestre R18 |
react-dom |
17.x | 18.3.1 | 19.0.0 | Doit correspondre exactement à la version react |
Testing Libraries
| Package | React 18 Min | React 19 Min | Notes |
|---|---|---|---|
@testing-library/react |
14.0.0 | 16.0.0 | RTL 13 utilise ReactDOM.render en interne - cassé en R18 |
@testing-library/jest-dom |
6.0.0 | 6.0.0 | v5 fonctionne mais v6 a des mises à jour de matchers React 18 |
@testing-library/user-event |
14.0.0 | 14.0.0 | v13 est sync, v14 est async - changement d'API requis |
jest |
27.x | 27.x | jest 27+ avec jsdom 16+ pour React 18 |
jest-environment-jsdom |
27.x | 27.x | Doit correspondre à la version jest |
Apollo Client
| Package | React 18 Min | React 19 Min | Notes |
|---|---|---|---|
@apollo/client |
3.8.0 | 3.11.0 | 3.8 ajoute useSyncExternalStore pour le mode concurrent |
graphql |
15.x | 16.x | Apollo 3.8+ peer requires graphql 15 ou 16 |
Lisez references/apollo-details.md pour les problèmes de mode concurrent et les changements de MockedProvider.
Emotion
| Package | React 18 Min | React 19 Min | Notes |
|---|---|---|---|
@emotion/react |
11.10.0 | 11.13.0 | 11.10 ajoute le support du mode concurrent React 18 |
@emotion/styled |
11.10.0 | 11.13.0 | Doit correspondre à la version @emotion/react |
@emotion/cache |
11.10.0 | 11.13.0 | Si utilisé directement |
React Router
| Package | React 18 Min | React 19 Min | Notes |
|---|---|---|---|
react-router-dom |
v6.0.0 | v6.8.0 | v5 → v6 est une migration avec rupture - voir détails ci-dessous |
react-router-dom v5 |
5.3.4 (contournement) | ❌ Non supporté | Voir note legacy peer deps |
react-router v5 → v6 est un sprint de migration SÉPARÉ. Lisez references/router-migration.md.
Redux
| Package | React 18 Min | React 19 Min | Notes |
|---|---|---|---|
react-redux |
8.0.0 | 9.0.0 | v7 fonctionne sur la racine legacy R18 uniquement - cassé en mode concurrent |
redux |
4.x | 5.x | Redux lui-même est agnostique au framework - la version react-redux compte |
@reduxjs/toolkit |
1.9.0 | 2.0.0 | RTK 1.9 testé contre React 18 |
Other Common Packages
| Package | React 18 Min | React 19 Min | Notes |
|---|---|---|---|
react-query / @tanstack/react-query |
4.0.0 | 5.0.0 | v3 ne supporte pas le mode concurrent |
react-hook-form |
7.0.0 | 7.43.0 | v6 a des problèmes de mode concurrent |
formik |
2.2.9 | 2.4.0 | v2.2.9 patchée pour React 18 |
react-select |
5.0.0 | 5.8.0 | v4 a des conflits de peer dep avec R18 |
react-datepicker |
4.8.0 | 6.0.0 | v4.8+ a ajouté le support React 18 |
react-dnd |
16.0.0 | 16.0.0 | v15 et versions antérieures ont des problèmes de mode concurrent R18 |
prop-types |
any | any | Standalone - non affecté par la version React |
Arbre de décision pour la résolution de conflits
npm ls montre un conflit peer pour le package X
│
▼
Le package X a-t-il une version supportant React 18 ?
OUI → npm install X@[min-compatible-version]
NON ↓
│
Le package est-il critique pour l'app ?
OUI → vérifiez les issues GitHub pour une branche/fork React 18
→ vérifiez si le mainteneur a une PR ouverte
→ dernier recours : --legacy-peer-deps (documentez pourquoi)
NON → envisagez de supprimer le package
Règles de --legacy-peer-deps
N'utilisez --legacy-peer-deps que lorsque :
- Le package n'a aucune version compatible React 18
- Le package est activement maintenu (pas abandonné)
- Le conflit est seulement une déclaration de peer dep (pas une incompatibilité d'API réelle)
Documentez chaque utilisation de --legacy-peer-deps dans un commentaire en haut de package.json ou dans un fichier MIGRATION.md expliquant pourquoi c'était nécessaire.