Componentes en línea
Restricciones
- Los hooks de React están preinyectados:
useState,useEffect,useRef,useCallback,useMemo,useContextyuseReducerestán disponibles sin necesidad de importarlos. - Los paquetes de npm requieren configuración: Para importar paquetes de terceros, configura las bibliotecas de terceros. De lo contrario, usa las funciones integradas del navegador o escribe la lógica en línea.
- Sin exportaciones por defecto: Usa exportaciones con nombre (
export const MyComponent = ...). Las exportaciones por defecto (export default) no son compatibles. - Sin importaciones entre snippets: Los archivos de snippets no pueden importar otros archivos de snippets. Importa todas las dependencias directamente en el archivo MDX principal.
- Sin importaciones de JSON: No se admite importar archivos
.json. - Sin división de código:
React.lazyyimport()dinámico no son compatibles. Todo el código de componentes de una página, incluidos los snippets importados, se compila en la página y se carga con ella.
Importar componentes
/snippets/. Más información sobre fragmentos reutilizables.
Los imports anidados no son compatibles. Importa todos los componentes referenciados directamente en el archivo MDX padre.
snippets/:
/snippets/color-generator.jsx
Consideraciones
- Renderizado en el cliente: La mayoría de los componentes personalizados se renderizan en el navegador después de que se carga la página, por lo que no están en el HTML renderizado en el servidor. Esto se aplica a los componentes que importas por nombre desde un snippet, como
import { ColorGenerator } from "/snippets/color-generator.jsx", y a la mayoría de los componentes que defines conexporten un archivo MDX. Los snippets MDX que importas como contenido, comoimport MySnippet from "/snippets/my-snippet.mdx", se renderizan en el servidor. Un componente que defines conexporttambién se renderiza en el servidor cuando es una plantilla simple. Solo debe colocar sus props en elementos HTML y componentes integrados, sin estado, hooks, llamadas a funciones, condicionales, controladores de eventos ni atributosstyle. Cada lugar donde lo uses debe pasar solo atributos de texto simples, como<HeroCard title="Quickstart" href="/quickstart" />. - SEO: Como los componentes personalizados no están en el HTML inicial, es posible que los motores de búsqueda no indexen completamente su contenido.
- Carga inicial: Los visitantes pueden ver un parpadeo o un desplazamiento del diseño mientras se renderizan los componentes personalizados. Para el contenido que debe aparecer en el HTML inicial o que no debe desplazarse al cargar, usa componentes integrados como tarjetas y columnas. La mayoría de los componentes integrados se renderizan en el servidor.
- Accesibilidad: Asegúrate de que los lectores de pantalla anuncien los cambios de contenido dinámico.
- Optimiza los arrays de dependencias: Incluye solo las dependencias necesarias en
useEffect. - Memoriza operaciones costosas: Usa
useMemoouseCallbackcuando proceda. - Reduce los renderizados: Divide los componentes grandes en otros más pequeños.
- Carga diferida: El código de los componentes no se puede cargar de forma diferida. Todos los componentes se cargan junto con la página. Si un componente realiza operaciones que consumen muchos recursos al montarse, como obtener datos o cálculos pesados, usa el renderizado condicional para posponer su montaje hasta que el usuario interactúe.