R

ReflexKR

Reflex 官方文档

动手掌握 Reflex 基础

·

课程概览

1

一点就变:State 与事件

2

时隐时现:条件渲染

3

绘制列表:rx.foreach

4

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

5

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

6

应用、页面,以及水果篮

动手掌握 Reflex 基础
第5课

时间 0:28–0:34

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

到目前为止,我们已经很自然地用上了 rx.button、rx.heading、rx.box 这些组件。这一课来梳理一下创建、组合和美化组件的规则。规则只有两条。

5-1. 组件就是函数的返回值(1 分钟)

组件是构成界面的零件,比如按钮、文字、图片。Reflex 内置了大量基础组件,只要写一个返回组件的函数,就得到了你自己的组件。

def my_button():
    return rx.button("Click Me")

localhost:3000

运行效果
返回一个 rx.button 的函数,本身就是一个组件。

5-2. 规则一:位置参数是子组件(2 分钟)

要把其他组件放进某个组件里,就用位置参数传进去。下面的 rx.text 和 my_button() 都是 rx.box 的子组件。用其他函数创建的组件,直接调用后放进去就行。

def my_container():
    return rx.box(
        rx.text("This is a page"),
        # Reference components defined in other functions.
        my_button(),
    )

localhost:3000

运行效果

This is a page

rx.box 里依次放入了文字和 my_button。

如果找不到想要的组件,可以用 rx.el 直接使用 HTML 标签。rx.el.div 就是 <div>,rx.el.p 就是 <p>。

def my_div():
    return rx.el.div(
        rx.el.p("Use base html!"),
    )

localhost:3000

运行效果

Use base html!

这是用 rx.el 创建的纯 HTML 元素。

如果这样还不够,还可以把 npm 上的 React 组件封装起来使用。

5-3. 规则二:关键字参数是 props 和样式(2 分钟)

组件的行为和外观由关键字参数决定,这些参数称为 props。每个组件都有自己特有的 props,第一次使用某个组件时,请先到文档里查一查它有哪些 props。

def half_filled_progress():
    return rx.progress(value=50)

localhost:3000

运行效果
通过 value=50 这个 prop,进度条填满了一半。

除了组件特有的 props,还可以直接把 CSS 属性当作 props 传入来调整样式。

def round_button():
    return rx.button("Click Me", border_radius="15px", font_size="18px")

localhost:3000

运行效果
用 border_radius 和 font_size 改变了圆角和字号的按钮。

小贴士 — CSS 属性名要改写成 snake_case:border-radius → border_radius,font-size → font_size。更多用法请参阅样式指南。

总结一下,组件由子组件和 props 组成。

子组件(children)props
是什么放在里面的文字或其他组件决定行为和外观的属性
传入方式位置参数关键字参数
示例rx.box(rx.text("hi"), my_button())rx.button("Go", color_scheme="green")

第1课里像 rx.heading(MyState.count, color=MyState.color) 这样把 Var 同时用作子组件和 props,遵循的也正是这两条规则。

课后练习

  1. 给 round_button 加上 color_scheme="green" 和 size="3"。
  2. 给 my_container 的 rx.box 设置 padding="16px"、border="1px solid #ccc"、border_radius="12px",把它做成卡片的样子。
  3. 如果把 rx.progress 的 value 换成第1课的 CounterState.count,会怎么样?试着让进度条随着每次点击按钮逐渐填满。

本课检查清单

  • 能说出位置参数和关键字参数分别会变成什么。
  • 能把 CSS 属性改写成 snake_case 的 props 来使用。
  • 找不到需要的组件时,会用 rx.el。

← 上一课

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

下一课 →

第6课 · 应用、页面,以及水果篮

订阅新课时和新课程通知

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

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

问答

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

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

R

ReflexKR

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

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

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

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

Built with Reflex