R

ReflexKR

Reflex 官方文档

动手掌握 Reflex 基础

·

课程概览

1

一点就变:State 与事件

2

时隐时现:条件渲染

3

绘制列表:rx.foreach

4

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

5

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

6

应用、页面,以及水果篮

动手掌握 Reflex 基础
第2课

时间 0:08–0:13

时隐时现:条件渲染

已登录就显示"欢迎回来",未登录就显示"请先登录"。应用经常需要根据状态显示不同的界面。这一课我们用 rx.cond,根据 State 的值切换界面。

2-1. 用 rx.cond 切换界面(3 分钟)

class LoginState(rx.State):
    logged_in: bool = False

    @rx.event
    def toggle_login(self):
        self.logged_in = not self.logged_in


def show_login():
    return rx.box(
        rx.cond(
            LoginState.logged_in,
            rx.heading("Logged In", as_="h2"),
            rx.heading("Not Logged In", as_="h2"),
        ),
        rx.button("Toggle Login", on_click=LoginState.toggle_login),
    )

localhost:3000

动手试试

Not Logged In

每次点击 Toggle Login,标题都会切换。

rx.cond 接收三个参数。

顺序参数在本例中
1条件(Var)LoginState.logged_in
2条件为真时显示的组件"Logged In" 标题
3条件为假时显示的组件"Not Logged In" 标题
  • 第三个参数可以省略。写成 rx.cond(LoginState.logged_in, rx.text("Welcome!")),就只在已登录时显示文字,否则什么都不显示。
  • 处理器 toggle_login 和第1课里的一样,也是事件处理器。它用 not 把真假反转过来。

2-2. 那为什么不直接用 if?(2 分钟)

如果按 Python 的习惯,你可能会想这样写:

def show_login():
    if LoginState.logged_in:
        return rx.heading("Logged In", as_="h2")
    return rx.heading("Not Logged In", as_="h2")

这段代码是行不通的。界面函数只在应用启动时执行一次,而那时还无从知道用户是否已经登录。rx.cond 则是在界面里埋下一条指令:"等到了浏览器里,再看值来决定显示哪个"。

为什么会这样,第4课会详细讲解。现在只需要记住:"在界面代码中根据 State 的值做分支时,用 rx.cond"。

课后练习

  1. 让 show_login 里按钮上的文字也随状态在 "Log In" / "Log Out" 之间切换。提示:在按钮的子组件位置放一个 rx.cond(...)。
  2. rx.cond 也可以用在 props 的值上。试着让标题的 color 在已登录时为 "green",否则为 "gray"。

本课检查清单

  • 能说出 rx.cond 的三个参数分别是什么。
  • 知道省略第三个参数会怎样。
  • 知道在界面代码中不能用 if 判断 State 的值。

← 上一课

第1课 · 一点就变:State 与事件

下一课 →

第3课 · 绘制列表:rx.foreach

订阅新课时和新课程通知

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

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

问答

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

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

R

ReflexKR

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

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

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

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

Built with Reflex