R

ReflexKR

Documentación de Reflex

Fundamentos de Reflex, con las manos

·

Resumen del curso

1

Haz clic y cambia: State y eventos

2

Ahora lo ves: renderizado condicional

3

Dibujar listas: rx.foreach

4

¿Por qué no funciona if? Compilación vs. ejecución

5

Darle estilo: componentes, props y estilos

6

Apps, páginas y una cesta de frutas

Fundamentos de Reflex, con las manos
Lección 6

Tiempo 0:34–0:40

Apps, páginas y una cesta de frutas

Llegamos a la última lección. Verás cómo conectar las funciones de interfaz que has creado hasta ahora a direcciones web reales y, juntando todo lo aprendido en las lecciones 1 a 5, terminarás una pequeña app.

6-1. Apps y páginas (2 min)

Una app Reflex se crea con rx.App, y las funciones de la interfaz se conectan a una dirección web (route) con add_page.

def index():
    return rx.text("Root Page")


app = rx.App()
app.add_page(index, route="/")
  • app = rx.App() debe estar en el nivel superior del archivo principal. Reflex busca la app por el nombre app.
  • route="/" es la página de inicio del sitio. Puedes seguir añadiendo páginas, como en app.add_page(about, route="/about").
  • Si omites route, la dirección será el nombre de la función: index es / y about es /about.

6-2. Todo junto: la cesta de frutas (4 min)

Una cesta a la que añades y quitas frutas con botones. Es corta, pero contiene todos los conceptos de este curso.

FRUITS = ["Apple", "Banana", "Cherry", "Grape", "Mango", "Peach"]


class BasketState(rx.State):
    basket: list[str] = []

    @rx.event
    def add_fruit(self):
        # Event handlers run real Python: pick the next fruit in the list.
        self.basket.append(FRUITS[len(self.basket) % len(FRUITS)])

    @rx.event
    def remove_last(self):
        if self.basket:
            self.basket.pop()


def fruit_basket():
    return rx.vstack(
        rx.hstack(
            rx.heading("My basket", as_="h2", size="5"),
            # Var operations: .length() and % work on vars in components.
            rx.badge(BasketState.basket.length()),
            rx.cond(
                BasketState.basket.length() % 2 == 0,
                rx.badge("even", color_scheme="green"),
                rx.badge("odd", color_scheme="orange"),
            ),
            align="center",
        ),
        rx.cond(
            BasketState.basket.length() > 0,
            rx.list.unordered(rx.foreach(BasketState.basket, rx.list.item)),
            rx.text("The basket is empty.", color_scheme="gray"),
        ),
        rx.hstack(
            rx.button("Add fruit", on_click=BasketState.add_fruit),
            rx.button("Remove last", on_click=BasketState.remove_last, variant="soft"),
        ),
        align="start",
    )


app = rx.App()
app.add_page(fruit_basket, route="/")

localhost:3000

Pruébalo

My basket

0even

The basket is empty.

Pulsa Add fruit y Remove last. El número, la insignia par/impar y la lista cambian a la vez.

Veamos en qué lección aprendiste cada parte del código.

CódigoConceptoLección
basket: list[str] = []State var que guarda datos que cambianLección 1
on_click=BasketState.add_fruitDisparador y manejador de eventosLección 1
rx.cond(... > 0, lista, "empty")Renderizado condicionalLección 2
rx.foreach(BasketState.basket, rx.list.item)Renderizado de listas. También puedes pasar directamente una función de componenteLección 3
len(self.basket) e if dentro del manejadorPython real en tiempo de ejecuciónLección 4
.length() y % 2 == 0 en la interfazOperaciones de Var en tiempo de compilaciónLección 4
variant="soft", color_scheme="gray"Dar estilo con propsLección 5
app.add_page(fruit_basket, route="/")Registrar una páginaLección 6

Fíjate en que el mismo len funciona en el manejador, pero en la interfaz se convierte en .length(). Si sabes responder a la pregunta de la lección 4, "¿cuándo se ejecuta esto?", ya dominas los fundamentos de Reflex.

Próximos pasos

Ya tienes los fundamentos: ahora toca crear una app de verdad.

  • Desarrollo web full stack con Python y Reflex: el curso de 4 horas de este sitio. Crearás desde cero una app de gestión de clientes con tablas, formularios, cuadros de diálogo y gráficos.
  • Tutorial de la Chat app (en inglés): crea una app de chat que recibe y muestra en tiempo real las respuestas de una IA.
  • Var y operaciones de Var (en inglés): la lista completa de las operaciones de Var que has probado en este curso.
  • Eventos y páginas (en inglés): más disparadores y más formas de definir rutas.
  • How Reflex works (en inglés): explica cómo funcionan por dentro el tiempo de compilación y el tiempo de ejecución de la lección 4.

Ejercicios

  1. Modifica add_fruit para que la misma fruta no entre dos veces en la cesta. Como estás dentro de un manejador, puedes usar if fruit not in self.basket.
  2. Añade un botón "Clear" que vacíe la cesta de una sola vez.
  3. Haz que aparezca una insignia "Full!" cuando la cesta tenga 5 frutas o más. Como es código de la interfaz, usa operaciones de Var y rx.cond.

Lista de comprobación de esta lección

  • Sé registrar páginas con rx.App y add_page.
  • Sé explicar qué concepto representa cada línea del código de la cesta de frutas.
  • Entiendo por qué la sintaxis es distinta cuando hago el mismo cálculo en un manejador o en la interfaz.

← Anterior

Lección 5 · Darle estilo: componentes, props y estilos

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