R

ReflexKR

Documentación de Reflex

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

El taller de componentes: los 100 componentes de Reflex
Tipografía

Markdown

rx.markdownrx.markdown.plugin

Documentación oficial

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.

Hello World!

Hello World!

Hello World!

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**."),
)

Prueba las propiedades

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: x2+y2x^2 + y^2. 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)
Si apagas use_gfm desaparecen el tachado y los enlaces automáticos; si apagas use_math, las fórmulas; si apagas use_raw, la interpretación de etiquetas HTML. Si solo apagas use_katex, la fórmula no se dibuja y queda como código.
PropiedadValoresPor defectoUso
hijouna cadena o un valor del StateobligatorioTexto Markdown original
component_map{"h1": función, "p": función, …}mapa por defecto del sitioComponente Reflex con el que se dibuja cada elemento Markdown
use_gfmTrue / FalseTrueGFM (tablas, tachado, enlaces automáticos, listas de tareas)
use_mathTrue / FalseTrueLeer la sintaxis de fórmulas $…$ (remark-math)
use_katexTrue / FalseTrueDibujar las fórmulas con KaTeX (rehype-katex)
use_rawTrue / FalseTrueInterpretar etiquetas HTML del texto (rehype-raw)
use_unwrap_imagesTrue / FalseTrueQuitar el <p> que envuelve las imágenes
remark_plugins · rehype_pluginslista de rx.markdown.plugin(…)ningunoAñ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.

Fórmulas

Lo que va entre $ se dibuja como fórmula LaTeX.

Pythagorean theorem: a2+b2=c2a^2 + b^2 = c^2.

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 4,cake4, cake 6.

Coffee $4, cake $6.

rx.vstack(
    rx.markdown("Coffee $4, cake $6."),
    rx.markdown(r"Coffee \$4, cake \$6."),
)

Bloques de código y tablas

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)
```
"""
)
SyntaxDescription
HeaderTitle
ParagraphText
rx.markdown(
    """
| Syntax    | Description |
| --------- | ----------- |
| Header    | Title       |
| Paragraph | Text        |
"""
)

Añadir plugins

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.

component_map: elegir el componente de cada elemento

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.

Hello World!

Here is some code:

component = rx.text("Hello World!")

And a link to Reflex.

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,
)

Completar el pedido

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!

  • Box was intact
  • Size fits

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.

← Anterior

Tipografía · Code

Siguiente →

Tipografía · Blockquote

Recibe avisos de nuevas lecciones

Te avisaremos por correo cuando este curso tenga lecciones nuevas o se abra un curso de continuación.

Datos: tu correo electrónico · Finalidad: avisos de nuevas lecciones o de la publicación de este curso · Conservación: hasta que pidas que lo borremos. No lo usamos para nada más ni lo compartimos. Responde a cualquier aviso y lo borraremos enseguida.

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.

Se muestra como texto plano, sin enlaces ni formato.

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
한국어English日本語简体中文EspañolDeutsch

© 2026 ReflexKR · Since 2026 · CC BY-NC 4.0

Built with Reflex