R

ReflexKR

Reflex 官方文档

动手掌握 Reflex 基础

·

课程概览

1

一点就变:State 与事件

2

时隐时现:条件渲染

3

绘制列表:rx.foreach

4

为什么 if 不行?编译时与运行时

5

打扮界面:组件、props 与样式

6

应用、页面,以及水果篮

动手掌握 Reflex 基础
第3课

时间 0:13–0:18

绘制列表:rx.foreach

待办列表、评论、商品卡片这类同一种样式反复出现的界面,都是用列表数据渲染出来的。这一课我们用 rx.foreach,把 State 中的列表渲染到界面上。

3-1. 用 rx.foreach 渲染列表(3 分钟)

class ListState(rx.State):
    items: list[str] = ["Apple", "Banana", "Cherry"]


def render_item(item: rx.Var[str]):
    # Render a single item.
    # Note that item here is a Var, not a str!
    return rx.list.item(item)


def show_fruits():
    return rx.list.unordered(
        rx.foreach(ListState.items, render_item),
    )

localhost:3000

运行效果
  • Apple
  • Banana
  • Cherry
State 列表中的三个元素被逐一渲染出来了。

rx.foreach 需要传入两样东西。

  1. 列表 Var:ListState.items
  2. 渲染单个元素的函数:render_item。注意不加括号,传入的是函数本身。

Reflex 会对列表中的每个元素调用 render_item 来生成组件。之后列表里增加或删除元素时,界面上的列表也会跟着变化。第6课的水果篮里会亲手验证这一点。

3-2. item 不是字符串,而是 Var(2 分钟)

关键在于,render_item 接收的 item 类型不是 str,而是 rx.Var[str]。

  • render_item 也是界面函数,只在应用启动时执行一次。那时还不知道列表里会有什么,所以 item 是一个指向"之后才会填入的值"的 Var。
  • 因此不能对它使用 len(item) 这样的 Python 内置函数,而要使用 Reflex 为 Var 准备的 Var 运算。item.length() 得到字符数,item.upper() 得到转成大写后的值。这也是第4课的主题。

出于同样的原因,Python 的列表推导式 [rx.list.item(i) for i in ListState.items] 也行不通。遍历 State 中的列表时,一律使用 rx.foreach。

课后练习

  1. 往 items 里再加两种水果,看看界面上是否显示出来。
  2. 让 render_item 返回 rx.badge(item) 而不是 rx.list.item。同样的数据会以不同的样子呈现。
  3. 写一个事件处理器,点击按钮时往 items 里添加水果。答案在第6课。

本课检查清单

  • 能说出传给 rx.foreach 的两样东西。
  • 明白渲染元素的函数接收到的值为什么是 Var。
  • 知道对 State 中的列表要用 rx.foreach,而不是列表推导式。

← 上一课

第2课 · 时隐时现:条件渲染

下一课 →

第4课 · 为什么 if 不行?编译时与运行时

订阅新课时和新课程通知

本课程新增课时或推出后续课程时,我们会发邮件通知你。

收集项目:电子邮箱 · 用途:本课程的新课时和上线通知 · 保存期限:直到你要求删除。不会用于其他用途,也不会提供给他人。回复任意通知邮件,我们会立即删除。

问答

关于本课有任何疑问都可以在这里留言。所有语言版本页面的提问会汇集在一起。

以纯文本显示,不支持链接和格式。

R

ReflexKR

动手学 Python 和 Reflex。所有示例均已在 Reflex 0.10.0 上实际运行验证。

ReflexKR 免费,没有横幅广告。如果对你有帮助,欢迎请我们喝杯咖啡。 ☕ 请我们喝杯咖啡

联盟链接与赞助说明
한국어English日本語简体中文EspañolDeutsch

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

Built with Reflex