Migration depuis Create React App (CRA)
L’intégration React d’Astro permet d’utiliser des composants React dans les composants Astro, y compris des applications React entières comme Create React App (CRA) !
De nombreuses applications fonctionneront comme des applications React complètes si vous les ajoutez directement à votre projet Astro avec l’intégration React installée. C’est un excellent moyen de rendre votre projet opérationnel immédiatement et de maintenir votre application fonctionnelle pendant que vous migrez vers Astro.
Au fil du temps, vous pouvez convertir votre structure pièce par pièce en une combinaison de composants .astro
et .jsx
. Vous découvrirez probablement que vous avez besoin de moins de composants React que vous ne le pensez !
Voici quelques concepts clés et stratégies de migration pour vous aider à démarrer. Utilisez le reste de notre documentation et notre communauté sur Discord pour continuer !
Principales similitudes entre CRA et Astro
Titre de la section Principales similitudes entre CRA et Astro-
La syntaxe des fichiers
.astro
est similaire à celle de JSX. L’écriture d’Astro devrait vous sembler familière. -
Astro utilise un routage basé sur les fichiers et permet à des pages spécialement nommées de créer des routes dynamiques.
-
Astro est basé sur des composants, et votre structure de balisage sera similaire avant et après votre migration.
-
Astro a des intégrations officielles pour React, Preact, et Solid pour que vous puissiez utiliser vos composants JSX existants. Notez que dans Astro, ces fichiers doivent avoir une extension
.jsx
ou.tsx
. -
Astro supporte l’installation de paquets NPM, y compris les bibliothèques React. La plupart de vos dépendances existantes fonctionneront dans Astro.
Principales différences entre CRA et Astro
Titre de la section Principales différences entre CRA et AstroLorsque vous reconstruisez votre site CRA dans Astro, vous remarquerez quelques différences importantes :
-
CRA est une application à page unique qui utilise
index.js
comme racine de votre projet. Astro est un site multi-pages, etindex.astro
est votre page d’accueil. -
Les composants
.astro
ne sont pas écrits comme des fonctions exportées qui renvoient un modèle de page. Au lieu de cela, vous diviserez votre code en une « barrière de code » pour votre JavaScript et un corps exclusivement pour le HTML que vous générez. -
Axé sur le contenu : Astro a été conçu pour mettre en valeur votre contenu et vous permettre d’opter pour l’interactivité uniquement en cas de besoin. Une application CRA existante peut être construite pour une grande interactivité côté client et peut nécessiter des techniques Astro avancées pour inclure des éléments qui sont plus difficiles à reproduire en utilisant des composants
.astro
, tels que des tableaux de bord.
Ajouter votre CRA à Astro
Titre de la section Ajouter votre CRA à AstroVotre application existante peut être affichée directement dans un nouveau projet Astro, souvent sans modification du code de votre application.
Créer un nouveau projet Astro
Titre de la section Créer un nouveau projet AstroUtilisez la commande create astro
de votre gestionnaire de paquets pour lancer l’assistant CLI d’Astro et sélectionner un nouveau projet Astro « vide ».
Ajouter les intégrations et les dépendances
Titre de la section Ajouter les intégrations et les dépendancesAjoutez l’intégration React en utilisant la commande astro add
de votre gestionnaire de paquets. Si votre application utilise Tailwind ou MDX, vous pouvez ajouter plusieurs intégrations Astro en utilisant la même commande :
Si votre CRA nécessite des dépendances (par exemple des paquets NPM), installez-les individuellement en utilisant la ligne de commande ou en les ajoutant manuellement au package.json
de votre nouveau projet Astro, puis en lançant une commande d’installation. Notez que beaucoup de dépendances React, mais pas toutes, fonctionneront dans Astro.
Ajouter vos fichiers d’application existants
Titre de la section Ajouter vos fichiers d’application existantsCopiez les fichiers sources et les dossiers de votre projet Create React App (CRA) (par exemple components
, hooks
, styles
, etc.) dans un nouveau dossier à l’intérieur de src/
, en conservant sa structure de fichiers pour que votre application continue à fonctionner. Notez que toutes les extensions de fichiers .js
doivent être renommées en .jsx
ou .tsx
.
N’incluez aucun fichier de configuration. Vous utiliserez les propres fichiers d’Astro astro.config.mjs
, package.json
, et tsconfig.json
.
Déplacez le contenu du dossier public/
de votre application (par exemple les actifs statiques) dans le dossier public/
d’Astro.
Répertoirepublic/
- logo.png
- favicon.ico
- …
Répertoiresrc/
Répertoirecra-project/
- App.jsx
- …
Répertoirepages/
- index.astro
- astro.config.mjs
- package.json
- tsconfig.json
Afficher votre application
Titre de la section Afficher votre applicationImportez le composant racine de votre application dans la section frontmatter de index.astro
, puis affichez le composant <App />
dans votre modèle de page :
Votre application a besoin d’une directive client pour l’interactivité. Astro affichera votre application React en HTML statique jusqu’à ce que vous optiez pour le JavaScript côté client.
Utilisez client:load
pour vous assurer que votre application se charge immédiatement depuis le serveur, ou client:only="react"
pour ignorer le rendu sur le serveur et exécuter votre application entièrement côté client.
Convertir votre CRA en Astro
Titre de la section Convertir votre CRA en AstroAprès avoir ajouté votre application existante à Astro, vous voudrez probablement convertir votre application elle-même à Astro !
Vous reproduirez un schéma similaire basé sur des composants en utilisant une mise en page HTML dans des composants Astro pour votre structure de base tout en important et en incluant des composants React individuels (qui peuvent eux-mêmes être des applications entières !) pour des îlots d’interactivité.
Chaque migration sera différente et peut être effectuée de manière incrémentale sans perturber votre application de travail. Transformez des éléments individuels à votre propre rythme afin que de plus en plus de votre application soit alimentée par des composants Astro au fil du temps.
Lors de la conversion de votre application React, vous déciderez quels composants React vous allez réécrire en composants Astro. La seule restriction est que les composants Astro peuvent importer des composants React, alors que les composants React ne peuvent importer que d’autres composants React :
Au lieu d’importer des composants Astro dans des composants React, vous pouvez imbriquer des composants React dans un seul composant Astro :
Il peut être utile de se familiariser avec les îles Astro et les composants Astro avant de restructurer votre CRA en projet Astro.
Comparaison : JSX vs Astro
Titre de la section Comparaison : JSX vs AstroComparez le composant CRA suivant et le composant Astro correspondant :
Conversion des fichiers JSX en fichiers .astro
Titre de la section Conversion des fichiers JSX en fichiers .astroVoici quelques conseils pour convertir un composant CRA .js
en un composant .astro
:
-
Utilisez le JSX renvoyé de la fonction du composant CRA existant comme base de votre modèle HTML.
-
Changez toute syntaxe CRA ou JSX en Astro ou aux standards web HTML. Cela inclut
{children}
etclassName
, par exemple. -
Déplacez tout JavaScript nécessaire, y compris les instructions d’importation, dans une « barrière de code » (
---
). Remarque : le JavaScript pour afficher le contenu de manière conditionnelle est souvent écrit à l’intérieur du modèle HTML directement dans Astro. -
Utilisez
Astro.props
pour accéder à toutes les props supplémentaires qui ont été précédemment transmises à votre fonction CRA. -
Décidez si les composants importés doivent également être convertis en Astro. Vous pouvez les garder en tant que composants React pour le moment, ou pour toujours. Mais vous pouvez éventuellement vouloir les convertir en composants
.astro
, surtout s’ils n’ont pas besoin d’être interactifs ! -
Remplacez
useEffect()
par des déclarations d’importation ouimport.meta.glob()
pour interroger vos fichiers locaux. Utilisezfetch()
pour récupérer des données externes.
Tests de migration
Titre de la section Tests de migrationComme Astro produit du HTML brut, il est possible d’écrire des tests de bout en bout en utilisant le résultat de l’étape de construction. Tous les tests de bout en bout écrits précédemment peuvent fonctionner prêts à l’emploi si vous avez été en mesure de faire correspondre le balisage de votre site avec CRA. Les bibliothèques de test telles que Jest et React Testing Library peuvent être importées et utilisées dans Astro pour tester vos composants React.
Voir le guide des tests d’Astro pour plus d’informations.
Référence : Convertir la syntaxe CRA en Astro
Titre de la section Référence : Convertir la syntaxe CRA en AstroImportations CRA vers Astro
Titre de la section Importations CRA vers AstroMettez à jour tous les imports de fichiers pour qu’ils fassent exactement référence à des chemins d’accès relatifs. Cela peut être fait en utilisant des alias d’importation, ou en écrivant un chemin relatif en entier.
Notez que .astro
et plusieurs autres types de fichiers doivent être importés avec leur extension complète.
Les props d’enfants de CRA à Astro
Titre de la section Les props d’enfants de CRA à AstroConvertit toutes les instances de {children}
en un <slot />
Astro. Ce dernier n’a pas besoin de recevoir {children}
en tant que propriété de fonction et affichera automatiquement le contenu des enfants dans un <slot />
.
Les composants React qui passent plusieurs ensembles d’enfants peuvent être migrés vers un composant Astro en utilisant des slots nommés.
En savoir plus sur l’utilisation spécifique de <slot />
dans Astro.
Récupération de données de CRA à Astro
Titre de la section Récupération de données de CRA à AstroLa récupération de données dans un composant Create React App est similaire à Astro, avec quelques légères différences.
Vous devrez supprimer toutes les instances d’un crochet d’effet secondaire (useEffect
) pour import.meta.glob()
ou getCollection()
/getEntryBySlug()
pour accéder aux données depuis d’autres fichiers dans la source de votre projet.
Pour récupérer des données distantes, utilisez fetch()
.
Ces requêtes de données sont effectuées dans la partie avant du composant Astro et utilisent des attentes de premier niveau.
En savoir plus sur l’importation de fichiers locaux avec import.meta.glob()
, l’interrogation à l’aide de l’API Collections ou la récupération de données distantes.
Le style de CRA à Astro
Titre de la section Le style de CRA à AstroIl se peut que vous deviez remplacer les bibliothèques CSS-in-JS (par exemple, styled-components
) par d’autres options CSS disponibles dans Astro.
Si nécessaire, convertissez les objets de style en ligne (style={{ fontWeight: "bold" }}
) en attributs de style HTML en ligne (style="font-weight:bold ;"
). Vous pouvez également utiliser une balise Astro <style>
pour les styles CSS étendus.
Tailwind est pris en charge après l’installation de l’intégration Tailwind. Aucune modification de votre code Tailwind existant n’est nécessaire !
En savoir plus sur les styles dans Astro.
Dépannage
Titre de la section DépannageVotre CRA pourrait « simplement fonctionner » dans Astro ! Mais il se peut que vous deviez procéder à des ajustements mineurs pour reproduire les fonctionnalités et/ou les styles de votre application existante.
Si vous ne trouvez pas les réponses à vos questions dans ces documents, visitez le serveur Discord d’Astro et posez vos questions dans notre forum d’assistance !