Les RSC pour les développeurs Astro
(overreacted.io)- Astro et les React Server Components (RSC) implémentent de façon similaire la séparation entre le code serveur et le code client
- Dans Astro, Astro Component et Client Island se partagent chacun un rôle fonctionnel
- Les RSC reprennent le même concept en le divisant entre Server Component et Client Component, avec la directive
'use client'pour définir la frontière - Par rapport à Astro, les RSC offrent plus de souplesse pour composer des UI interactives et partager du code
- Les deux modèles reposent sur une structure où les données circulent à sens unique, du serveur vers le client
Introduction et concepts de base
- Astro fournit deux grands types de composants : Astro Component et Client Island
- Un Astro Component utilise l’extension
.astro, s’exécute uniquement sur le serveur ou au moment du build, et peut effectuer des opérations impossibles côté client, comme accéder au système de fichiers, interroger une base de données ou appeler des services internes - Un Client Island est un composant destiné à React, Vue, etc., qui s’exécute dans le navigateur et prend en charge les interactions utilisateur
- Un Astro Component peut rendre un Client Island, mais un Client Island ne peut pas appeler un Astro Component
- Cette structure garantit une unidirectionnalité où les données circulent toujours du serveur vers le client
Exemple de code et séparation des rôles
- Dans l’exemple de code,
PostPreview.astrolit un fichier sur le serveur, en récupère le titre, puis transmet ces données à un Client Island LikeButton, écrit en React, prend ensuite en charge les changements d’état et les clics utilisateur une fois le navigateur chargé- Astro Component et Client Island fonctionnent dans deux mondes distincts, et le passage des données se fait uniquement vers le bas à partir de l’Astro Component
Comparaison avec les React Server Components (RSC)
- Comme Astro, les RSC distinguent composants serveur (Server Components) et composants client (Client Components)
- Avec React Server Components, on déclare les composants serveur sous forme de fonctions JavaScript, et la directive 'use client' indique explicitement où commence le code client
- Dans les RSC, un même fichier de composant peut jouer à la fois un rôle serveur et un rôle client : contrairement à Astro, il n’y a pas besoin d’extension de fichier spécifique ni de séparation distincte, et la frontière peut être déplacée selon le besoin par une simple déclaration
'use client' - Lorsqu’un composant utilise une fonctionnalité réservée au client (par exemple
useState) ou au serveur (comme l’accès à la base de données), une erreur de build se produit s’il est utilisé dans le mauvais environnement, ce qui fournit un retour clair
Différences visuelles et structurelles entre Astro et les RSC
- Astro possède une frontière claire grâce à la séparation entre fichiers
.astroet fichiers JS/TS - Les RSC, où tout repose fondamentalement sur React, offrent une bien meilleure capacité de partage de code et davantage de souplesse
- Par exemple, un composant neutre (comme un parseur Markdown) qui n’utilise ni état ni fonctionnalité serveur peut être utilisé des deux côtés
- Dans les RSC, l’endroit où un composant s’exécute est déterminé automatiquement selon son chemin d’import
Avantages et limites du modèle RSC
- L’intérêt des RSC réside dans la réutilisation du code et la souplesse de déplacement des rôles
- N’importe quel composant peut franchir facilement la frontière selon les besoins avec une simple déclaration
'use client' - Dans Astro, quand la nature statique ou dynamique d’une UI évolue, la transformation du code peut devenir fastidieuse ; les RSC simplifient ce point
- N’importe quel composant peut franchir facilement la frontière selon les besoins avec une simple déclaration
- Le principal inconvénient des RSC est leur courbe d’apprentissage plus élevée
- Le développeur doit en permanence se demander « dans quel monde suis-je ? », mais une erreur de build fournit un retour rapide en cas d’erreur
- Dans Astro, plus les parties dynamiques d’une UI augmentent, plus la structure se complexifie ; avec les RSC, tout l’arbre React est unifié, ce qui rend plus naturels la gestion de l’état et la transmission du contexte (Context)
Astro centré sur le HTML et RSC centré sur l’arbre React
- Le résultat produit par Astro est du HTML : à chaque navigation, la page est entièrement rechargée, ce qui n’offre pas une expérience SPA complète
- Le résultat des RSC est un arbre React (d’abord en HTML, puis transmis en JSON, etc. lors de la navigation)
- Cela permet de combiner les avantages des SPA et des MPA
- Il est possible de ne rafraîchir et répercuter directement depuis le serveur qu’une partie de l’UI, ce qui facilite les rafraîchissements partiels, la réception de données dynamiques et la conservation de l’état côté client
Prise en charge des fonctionnalités avancées de React
- Grâce à une structure d’arbre hybride serveur-client, les fonctionnalités avancées de React (comme
<Suspense>, les view transitions, etc.) s’intègrent naturellement - Il est aussi possible de gérer de manière déclarative côté client les états de chargement, ainsi que les retards liés aux polices, images, JavaScript et styles
- Toutes les fonctionnalités de React fonctionnent de bout en bout, sans rupture à la frontière entre serveur et client
Place respective des RSC et d’Astro
- Astro est un framework complet, tandis que les RSC se rapprochent davantage d’un bloc de construction ou d’un standard pour les frameworks
- Les implémentations officielles des RSC incluent Next.js App Router et Parcel RSC
Conclusion et recommandation
- L’expérience développeur (DX) des RSC reste encore un peu brute, mais mérite d’être explorée
- Si vous n’avez pas encore essayé Astro, c’est recommandé : pour les développeurs qui trouvent les RSC difficiles, Astro offre une porte d’entrée plus douce
- Même pour les développeurs qui n’ont utilisé que React côté client, Astro peut apporter une expérience de résolution de problèmes inattendue
3 commentaires
Je refactorise actuellement une ancienne application React vers Astro.
L’article met l’accent sur le « contexte intégré ». Le « contexte intégré » aide à créer rapidement un service, mais il faut savoir qu’il peut devenir une dette technique un jour.
Du point de vue de la maintenance à long terme du service, un « couplage lâche entre modules indépendants » vaut mieux qu’un « couplage fort intégré ».
Et Astro est justement le framework le plus flexible pour cela.
Astro : déployer un minimum de JavaScript
Sortie d'Astro 3.0
Avis Hacker News
use clientde React