ここまで、rx.button、rx.heading、rx.boxといったコンポーネントを何気なく使ってきました。この回では、コンポーネントを作り、組み立て、見た目を整えるためのルールを整理します。ルールはたった2つです。
コンポーネントとは、ボタン、テキスト、画像のように画面を構成する部品です。Reflexには標準のコンポーネントがたくさん用意されていて、コンポーネントを返す関数を作れば、それが自分だけのコンポーネントになります。
def my_button():
return rx.button("Click Me")localhost:3000
実行画面コンポーネントの中に別のコンポーネントを入れるには、位置引数として渡します。下の例では、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.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!
それでも足りなければ、npmにあるReactコンポーネントをラップして使うこともできます。
コンポーネントの動作や見た目は、キーワード引数で指定します。これをpropsと呼びます。propsはコンポーネントごとに異なるので、初めて使うコンポーネントはドキュメントでどんなpropsがあるか確認しましょう。
def half_filled_progress():
return rx.progress(value=50)localhost:3000
実行画面コンポーネント固有のprops以外に、CSSのプロパティをそのままpropsとして渡して見た目を整えることもできます。
def round_button():
return rx.button("Click Me", border_radius="15px", font_size="18px")localhost:3000
実行画面ポイント — 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の両方に入れたのも、この2つのルールそのものです。
round_buttonにcolor_scheme="green"とsize="3"を追加してみましょう。my_containerのrx.boxにpadding="16px"、border="1px solid #ccc"、border_radius="12px"を指定して、カードのような見た目にしてみましょう。rx.progressのvalueを1限目のCounterState.countに変えるとどうなるでしょうか?ボタンを押すたびにバーが伸びていくようにしてみましょう。rx.elを使える。新しい授業・講座のお知らせを受け取る
この講座に授業が追加されたり、続きの講座が公開されたりしたらメールでお知らせします。
R
ReflexKR
触って学ぶPythonとReflex。すべての例はReflex 0.10.0で実際に動かして確認しています。
ReflexKRはバナー広告なし・無料で運営しています。役に立ったら、コーヒー一杯で応援してください。 ☕ コーヒーで応援する
アフィリエイトと支援について© 2026 ReflexKR · Since 2026 · CC BY-NC 4.0
質問と回答
この回について気になることを書き込んでください。すべての言語のページの質問がここに集まります。