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.
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").route, la dirección será el nombre de la función: index es / y about es /about.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ébaloThe basket is empty.
Veamos en qué lección aprendiste cada parte del código.
| Código | Concepto | Lección |
|---|---|---|
basket: list[str] = [] | State var que guarda datos que cambian | Lección 1 |
on_click=BasketState.add_fruit | Disparador y manejador de eventos | Lección 1 |
rx.cond(... > 0, lista, "empty") | Renderizado condicional | Lección 2 |
rx.foreach(BasketState.basket, rx.list.item) | Renderizado de listas. También puedes pasar directamente una función de componente | Lección 3 |
len(self.basket) e if dentro del manejador | Python real en tiempo de ejecución | Lección 4 |
.length() y % 2 == 0 en la interfaz | Operaciones de Var en tiempo de compilación | Lección 4 |
variant="soft", color_scheme="gray" | Dar estilo con props | Lección 5 |
app.add_page(fruit_basket, route="/") | Registrar una página | Lecció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.
Ya tienes los fundamentos: ahora toca crear una app de verdad.
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.rx.cond.rx.App y add_page.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.