El taller de componentes: los 100 componentes de Reflex
·
Resumen del curso
Diseño
·
Box
·
Flex
·
Stack
·
Grid
·
Container
·
Section
·
Center
·
Spacer
·
Separator
·
Card
·
Inset
·
Aspect Ratio
·
Fragment
Tipografía
·
Text
·
Heading
·
Link
·
Code
·
Markdown
·
Blockquote
·
Quote
·
Strong
·
Em
·
Kbd
Formularios
·
Button
·
Input
·
Text Area
·
Checkbox
·
Switch
·
Radio Group
·
Select
·
Slider
·
Form
·
Upload
Visualización de datos
·
Badge
·
Avatar
·
Icon
·
Callout
·
List
·
Data List
·
Code Block
·
Progress
·
Spinner
·
Scroll Area
·
Moment
Mostrar y ocultar
·
Tabs
·
Accordion
·
Segmented Control
Superposiciones
·
Tooltip
·
Popover
·
Hover Card
·
Dialog
·
Alert Dialog
·
Drawer
·
Dropdown Menu
·
Context Menu
·
Toast
Renderizado dinámico
·
Cond
·
Match
·
Foreach
·
Auto Scroll
Multimedia
·
Image
·
Audio
·
Video
Tablas y cuadrículas de datos
·
Table
·
Data Table
·
Data Editor
Gráficos
·
Area Chart
·
Bar Chart
·
Line Chart
·
Composed Chart
·
Pie Chart
·
Radar Chart
·
Radial Bar Chart
·
Scatter Chart
·
Funnel Chart
·
Treemap
·
Sankey Chart
·
Error Bar
Piezas de gráficos
·
Axis
·
Cartesian Grid
·
Chart Tooltip
·
Legend
·
Label
·
Reference
·
Brush
Otras bibliotecas de gráficos
·
Plotly
·
Pyplot
Elementos HTML
·
HTML
·
HTML Text
·
HTML Layout
·
HTML Forms
·
HTML Media
·
HTML Tables
·
SVG
Otras herramientas
·
Theme
·
Skeleton
·
Clipboard
·
Html Embed
·
Script
·
Memo
Pedido del taller
Junto al campo para escribir reseñas de producto, añade una vista previa que muestre al momento cómo quedará el Markdown que escribe el cliente.
rx.markdown recibe una cadena en Markdown y la dibuja como títulos, listas, enlaces, código y tablas. Sigue el Markdown al estilo GitHub (GFM) y admite también fórmulas y resaltado de sintaxis. Se usa donde el contenido viene dado como texto: avisos largos, ayudas o textos escritos por los usuarios. El hijo debe ser una sola cadena o un valor del State.
Support us on Github.
Use reflex deploy to deploy your app with a single command.
rx.vstack(
rx.markdown("## Hello World!"),
rx.markdown("### Hello World!"),
rx.markdown("#### Hello World!"),
rx.markdown("Support us on [Github](https://github.com/reflex-dev/reflex)."),
rx.markdown("Use `reflex deploy` to deploy your app with **a single command**."),
)El aspecto de rx.markdown lo decide su contenido, así que en el banco de pruebas activamos y desactivamos los cuatro plugins que vienen encendidos por defecto. Cada interruptor cambia una parte de la frase.
Prueba las propiedades
Old new price. Area: . Raw HTML. Visit https://reflex.dev
use_gfm
use_math
use_katex
use_raw
rx.markdown("~~Old~~ **new** price. Area: $x^2 + y^2$. <mark>Raw HTML</mark>. Visit https://reflex.dev", use_gfm=True, use_math=True, use_katex=True, use_raw=True)| Propiedad | Valores | Por defecto | Uso |
|---|---|---|---|
| hijo | una cadena o un valor del State | obligatorio | Texto Markdown original |
component_map | {"h1": función, "p": función, …} | mapa por defecto del sitio | Componente Reflex con el que se dibuja cada elemento Markdown |
use_gfm | True / False | True | GFM (tablas, tachado, enlaces automáticos, listas de tareas) |
use_math | True / False | True | Leer la sintaxis de fórmulas $…$ (remark-math) |
use_katex | True / False | True | Dibujar las fórmulas con KaTeX (rehype-katex) |
use_raw | True / False | True | Interpretar etiquetas HTML del texto (rehype-raw) |
use_unwrap_images | True / False | True | Quitar el <p> que envuelve las imágenes |
remark_plugins · rehype_plugins | lista de rx.markdown.plugin(…) | ninguno | Añadir plugins |
En Reflex 0.10, rx.markdown siempre pone un <div> exterior, y las propiedades de estilo como padding se aplican a ese div. En cuanto a eventos, solo tiene los básicos.
Lo que va entre $ se dibuja como fórmula LaTeX.
Pythagorean theorem: .
rx.markdown("Pythagorean theorem: $a^2 + b^2 = c^2$.")Como $ es el símbolo de las fórmulas, si en un texto aparece dos veces, lo que hay entre ambos se convierte en fórmula y el texto desaparece o se ve raro. Para mostrar un $ de verdad, como en un precio, escríbelo como \$. Cuando no conoces el contenido de antemano, como en textos de usuarios o respuestas de una IA, pásalo con content.replace("$", "\\$"). Abajo, la primera línea se rompe y la segunda se ve tal cual.
Coffee 6.
Coffee $4, cake $6.
rx.vstack(
rx.markdown("Coffee $4, cake $6."),
rx.markdown(r"Coffee \$4, cake \$6."),
)Si escribes el nombre del lenguaje tras tres comillas invertidas, obtienes un bloque de código con resaltado de sintaxis. Si separas celdas con |, obtienes una tabla (GFM). En las cadenas de varias líneas, la sangría común del principio se elimina automáticamente.
import reflex as rx
app = rx.App()
app.add_page(index)rx.markdown(
"""
```python
import reflex as rx
app = rx.App()
app.add_page(index)
```
"""
)| Syntax | Description |
|---|---|
| Header | Title |
| Paragraph | Text |
rx.markdown(
"""
| Syntax | Description |
| --------- | ----------- |
| Header | Title |
| Paragraph | Text |
"""
)Además de los plugins por defecto, puedes añadir plugins de remark (fase Markdown) y de rehype (fase HTML) con remark_plugins y rehype_plugins. Se crean con rx.markdown.plugin(paquete@versión, nombre exportado) y, si necesitan opciones, se pasan como tupla (plugin, dict de opciones).
# Atajos de emoji :smile: → emoji
rx.markdown(
"Hello :smile:! :rocket:",
remark_plugins=[rx.markdown.plugin("remark-emoji@5.0.2", "remarkEmoji")],
)
# Filtrar HTML no fiable con reglas seguras parecidas a las de GitHub
rx.markdown(
'Some **bold** text and a <script>alert("XSS")</script>.',
use_raw=True,
rehype_plugins=[rx.markdown.plugin("rehype-sanitize@5.0.1", "rehypeSanitize")],
)
# Plugin con opciones: pone un id a los títulos y convierte cada título en un enlace a ese id
rx.markdown(
"## Heading 2\n### Heading 3",
rehype_plugins=[
rx.markdown.plugin("rehype-slug@6.0.0", "rehypeSlug"),
(
rx.markdown.plugin("rehype-autolink-headings@7.1.0", "rehypeAutolinkHeadings"),
{"behavior": "wrap", "properties": {"className": ["heading-link"]}},
),
],
)Cada plugin instala un paquete npm nuevo en el frontend de la app, así que en esta página solo se muestran como código.
Las claves de component_map son nombres de elementos Markdown (h1, p, code, pre, a …) y los valores son funciones que reciben el texto y devuelven un componente Reflex. pre (bloque de código) y a (enlace) reciben además **props, que hay que pasar tal cual: en pre va el nombre del lenguaje y en a, la dirección. Los elementos que no indiques usan el aspecto por defecto.
markdown_custom_map = {
"h1": lambda text: rx.heading(text, as_="h2", size="5", margin_y="0.5em"),
"p": lambda text: rx.text(text, color_scheme="green", margin_y="0.5em"),
"code": lambda text: rx.code(text, color_scheme="purple"),
"pre": lambda text, **props: rx.code_block(text, **props, theme=rx.code_block.themes.dark, margin_y="1em"),
"a": lambda text, **props: rx.link(text, **props, color_scheme="crimson", underline="always"),
}
rx.markdown(
r"""
# Hello World!
Here is some `code`:
```python
component = rx.text("Hello World!")
```
And a link to [Reflex](https://reflex.dev/).
""",
component_map=markdown_custom_map,
)Si guardas el contenido en el State, rx.markdown(State.valor) se vuelve a dibujar cada vez que cambia el valor. Lo que escribas en el campo de la izquierda cambia al instante la vista previa de la derecha. Como es texto de usuarios, con use_raw=False no se interpretan las etiquetas HTML.
Thanks for the fast delivery!
Rating: 5/5
class MarkdownPreviewState(rx.State):
source: str = "**Thanks** for the *fast* delivery!\n\n- Box was intact\n- Size fits\n\nRating: `5/5`"
@rx.event
def set_source(self, value: str):
self.source = value
rx.grid(
rx.text_area(
value=MarkdownPreviewState.source,
on_change=MarkdownPreviewState.set_source,
rows="9",
width="100%",
),
rx.box(
rx.markdown(MarkdownPreviewState.source, use_raw=False),
padding="0 14px",
border=f"1px solid {rx.color('gray', 6)}",
border_radius="8px",
min_height="100%",
),
columns={"initial": "1", "sm": "2"},
spacing="3",
width="100%",
)Notas del taller
rx.markdown(una cadena o un valor del State). GFM, fórmulas y HTML vienen activados por defecto.
Los plugins por defecto se apagan con use_gfm, use_math, use_katex, use_raw y use_unwrap_images.
Un $ de verdad dentro del texto se escribe \$ (precios, respuestas de IA).
component_map cambia el componente con que se dibuja cada elemento. pre y a reciben **props.
Para mostrar texto de usuarios, use_raw=False. Para añadir plugins, remark_plugins y rehype_plugins.
Recibe avisos de nuevas lecciones
Te avisaremos por correo cuando este curso tenga lecciones nuevas o se abra un curso de continuación.
R
ReflexKR
Aprende Python y Reflex haciendo. Todos los ejemplos se ejecutaron y verificaron en Reflex 0.10.0.
ReflexKR es gratis y sin banners publicitarios. Si te ayudó, puedes apoyarlo con un café. ☕ Invítanos un café
Aviso de afiliados© 2026 ReflexKR · Since 2026 · CC BY-NC 4.0
Preguntas y respuestas
Pregunta lo que quieras sobre esta lección. Aquí se reúnen las preguntas de todas las versiones de idioma de esta página.