Composants en ligne
Contraintes
- Les hooks React sont pré-injectés :
useState,useEffect,useRef,useCallback,useMemo,useContextetuseReducersont disponibles sans les importer. - Les packages npm nécessitent une configuration : pour importer des packages tiers, configurez les bibliothèques tierces. Sinon, utilisez les fonctionnalités natives du navigateur ou écrivez la logique directement dans le composant.
- Pas d’exports par défaut : utilisez des exports nommés (
export const MyComponent = ...). Les exports par défaut (export default) ne sont pas pris en charge. - Pas d’imports entre snippets : les fichiers de snippets ne peuvent pas importer d’autres fichiers de snippets. Importez toutes les dépendances directement dans le fichier MDX parent.
- Pas d’imports JSON : l’import de fichiers
.jsonn’est pas pris en charge. - Pas de fractionnement du code :
React.lazyetimport()dynamique ne sont pas pris en charge. Tout le code des composants d’une page, y compris les snippets importés, est compilé dans la page et chargé avec elle.
Importer des composants
/snippets/. En savoir plus sur les snippets réutilisables.
Les imports imbriqués ne sont pas pris en charge. Importez tous les composants référencés directement dans le fichier MDX parent.
snippets/ :
/snippets/color-generator.jsx
Considérations
- Rendu côté client : La plupart des composants personnalisés s’affichent dans le navigateur après le chargement de la page, ils ne figurent donc pas dans le HTML rendu côté serveur. Cela s’applique aux composants que vous importez par leur nom depuis un snippet, comme
import { ColorGenerator } from "/snippets/color-generator.jsx", et à la plupart des composants que vous définissez avecexportdans un fichier MDX. Les snippets MDX que vous importez en tant que contenu, commeimport MySnippet from "/snippets/my-snippet.mdx", sont rendus côté serveur. Un composant que vous définissez avecexportest également rendu côté serveur lorsqu’il s’agit d’un simple modèle. Il doit uniquement placer ses props dans des éléments HTML et des composants intégrés, sans état, hooks, appels de fonction, conditions, gestionnaires d’événements ni attributsstyle. Chaque endroit où vous l’utilisez doit transmettre uniquement des attributs de type chaîne simples, comme<HeroCard title="Quickstart" href="/quickstart" />. - SEO : Comme les composants personnalisés ne figurent pas dans le HTML initial, les moteurs de recherche peuvent ne pas indexer complètement leur contenu.
- Chargement initial : Les visiteurs peuvent voir un flash ou un décalage de mise en page pendant le rendu des composants personnalisés. Pour le contenu qui doit apparaître dans le HTML initial ou ne doit pas se décaler au chargement, utilisez plutôt des composants intégrés comme les cartes et les colonnes. La plupart des composants intégrés sont rendus côté serveur.
- Accessibilité : Assurez-vous que les lecteurs d’écran annoncent les changements de contenu dynamique.
- Optimisez les tableaux de dépendances : N’incluez que les dépendances nécessaires dans
useEffect. - Mémoïsez les opérations coûteuses : Utilisez
useMemoouuseCallbacklorsque cela est pertinent. - Réduisez les re-rendus : Décomposez les grands composants en composants plus petits.
- Lazy loading : Le code des composants ne peut pas être chargé de façon différée. Tous les composants sont chargés avec la page. Si un composant effectue des opérations gourmandes en ressources lorsqu’il est monté, comme la récupération de données ou des calculs lourds, utilisez le rendu conditionnel pour différer son montage jusqu’à une interaction de l’utilisateur.