已登录就显示"欢迎回来",未登录就显示"请先登录"。应用经常需要根据状态显示不同的界面。这一课我们用 rx.cond,根据 State 的值切换界面。
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
动手试试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 把真假反转过来。如果按 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"。
show_login 里按钮上的文字也随状态在 "Log In" / "Log Out" 之间切换。提示:在按钮的子组件位置放一个 rx.cond(...)。rx.cond 也可以用在 props 的值上。试着让标题的 color 在已登录时为 "green",否则为 "gray"。rx.cond 的三个参数分别是什么。if 判断 State 的值。订阅新课时和新课程通知
本课程新增课时或推出后续课程时,我们会发邮件通知你。
问答
关于本课有任何疑问都可以在这里留言。所有语言版本页面的提问会汇集在一起。