コンポーネント工房:Reflexライブラリ100
·
講座の概要
レイアウト
·
Box
·
Flex
·
Stack
·
Grid
·
Container
·
Section
·
Center
·
Spacer
·
Separator
·
Card
·
Inset
·
Aspect Ratio
·
Fragment
タイポグラフィ
·
Text
·
Heading
·
Link
·
Code
·
Markdown
·
Blockquote
·
Quote
·
Strong
·
Em
·
Kbd
フォーム
·
Button
·
Input
·
Text Area
·
Checkbox
·
Switch
·
Radio Group
·
Select
·
Slider
·
Form
·
Upload
データ表示
·
Badge
·
Avatar
·
Icon
·
Callout
·
List
·
Data List
·
Code Block
·
Progress
·
Spinner
·
Scroll Area
·
Moment
開閉と切り替え
·
Tabs
·
Accordion
·
Segmented Control
オーバーレイ
·
Tooltip
·
Popover
·
Hover Card
·
Dialog
·
Alert Dialog
·
Drawer
·
Dropdown Menu
·
Context Menu
·
Toast
動的レンダリング
·
Cond
·
Match
·
Foreach
·
Auto Scroll
メディア
·
Image
·
Audio
·
Video
表とデータグリッド
·
Table
·
Data Table
·
Data Editor
チャート
·
Area Chart
·
Bar Chart
·
Line Chart
·
Composed Chart
·
Pie Chart
·
Radar Chart
·
Radial Bar Chart
·
Scatter Chart
·
Funnel Chart
·
Treemap
·
Sankey Chart
·
Error Bar
チャートの部品
·
Axis
·
Cartesian Grid
·
Chart Tooltip
·
Legend
·
Label
·
Reference
·
Brush
ほかのチャートライブラリ
·
Plotly
·
Pyplot
HTML要素
·
HTML
·
HTML Text
·
HTML Layout
·
HTML Forms
·
HTML Media
·
HTML Tables
·
SVG
そのほかの道具
·
Theme
·
Skeleton
·
Clipboard
·
Html Embed
·
Script
·
Memo
rx.cond公式ドキュメント
工房の注文書
ショッピングサイトのヘッダーにログインボタンを付けてください。ログインしたら、その場所にユーザー名とログアウトボタンが表示されるようにしてください。
rx.cond(条件, A, B)は、条件が真なら A を、偽なら B を表示します。条件にはふつう State の値が入ります。Python のifはページを作るときに一度だけ実行されるので、State の値を見て画面を変えることはできません。ブラウザで値が変わるたびに選び直すにはrx.condを使います。
Text 1
class CondBasicState(rx.State):
show: bool = True
@rx.event
def change(self):
self.show = not self.show
rx.vstack(
rx.button("Toggle", on_click=CondBasicState.change),
rx.cond(
CondBasicState.show,
rx.text("Text 1", color="blue"),
rx.text("Text 2", color="red"),
),
)rx.condには見た目のプロパティはありません。代わりに条件を自分でオン・オフしてみてください。2行目のようにコンポーネントではない値(ここでは色の名前)を2つ渡すと、rx.condはコンポーネントではなく値を選ぶ Var になり、プロパティの位置に入ります。
プロパティを変えてみる
Text 1
Statusshow
ok
rx.hstack(
rx.cond(
True,
rx.text("Text 1", color="blue"),
rx.text("Text 2", color="red"),
),
rx.badge(
"Status",
color_scheme=rx.cond(True, "green", "red"),
),
spacing="4",
align="center",
)| 引数 | 値 | 用途 |
|---|---|---|
1つ目(cond) | Var(ふつうは bool) | 選ぶ基準。空文字列・0・空リストなどは偽とみなす |
| 2つ目 | コンポーネントまたは値 | 真のときに表示するもの |
| 3つ目 | コンポーネントまたは値 | 偽のときに表示するもの。コンポーネントなら省略できる |
3つ目の引数は省略できます。そうすると、条件が偽のときは何も表示されません。「あるときだけ表示する」のに使います。プロパティの値として使うとき(値を2つ渡すとき)は省略できません。
This text appears when condition is True
This text is always visible
class CondOptionalState(rx.State):
show_optional: bool = True
@rx.event
def toggle_optional(self):
self.show_optional = not self.show_optional
rx.vstack(
rx.button("Toggle", on_click=CondOptionalState.toggle_optional),
rx.cond(
CondOptionalState.show_optional,
rx.text("This text appears when condition is True", color="green"),
),
rx.text("This text is always visible", color="gray"),
)Var の前に~を付けると条件が反転します(Python のnot)。Var にはnotを使えないので~を使います。下の2行は常に逆に表示されます。
Text 1
Text 2
class CondBasicState(rx.State):
show: bool = True
@rx.event
def change(self):
self.show = not self.show
rx.vstack(
rx.button("Toggle", on_click=CondBasicState.change),
rx.cond(CondBasicState.show, rx.text("Text 1", color="blue"), rx.text("Text 2", color="red")),
rx.cond(~CondBasicState.show, rx.text("Text 1", color="blue"), rx.text("Text 2", color="red")),
)Var どうしはand・orの代わりに&(かつ)と|(または)でつなぎます。&・|は>=より先に計算されるので、比較式は必ずかっこで囲みます。下では 18 歳以上 65 歳以下なら働けることになり、13 歳未満か 65 歳以上なら割引のバッジが付きます。
Age: 19
You can work!
import random
class CondComplexState(rx.State):
age: int = 19
@rx.event
def change(self):
self.age = random.randint(0, 100)
rx.vstack(
rx.button("Random age", on_click=CondComplexState.change),
rx.text(f"Age: {CondComplexState.age}"),
rx.cond(
(CondComplexState.age >= 18) & (CondComplexState.age <= 65),
rx.text("You can work!", color="green"),
rx.text("You cannot work!", color="red"),
),
rx.cond(
(CondComplexState.age < 13) | (CondComplexState.age >= 65),
rx.badge("Discount ticket", color_scheme="orange"),
),
)rx.condの3つ目の位置にさらにrx.condを入れるとelifになります。下は正の数・0・負の数を見分けます。
0 is Zero!
import random
class CondNestedState(rx.State):
num: int = 0
@rx.event
def change(self):
self.num = random.randint(-10, 10)
rx.vstack(
rx.button("Random number", on_click=CondNestedState.change),
rx.cond(
CondNestedState.num > 0,
rx.text(f"{CondNestedState.num} is Positive!", color="orange"),
rx.cond(
CondNestedState.num == 0,
rx.text(f"{CondNestedState.num} is Zero!", color="blue"),
rx.text(f"{CondNestedState.num} is Negative!", color="red"),
),
),
)もう少し複雑な例として、3つの数のうち最大のものを探し、同じ数があればそれを知らせる Python のコードがあります。
a = 8
b = 10
c = 2
if (a > b and a > c) and (a != b and a != c):
print(a, " is the largest!")
elif (b > a and b > c) and (b != a and b != c):
print(b, " is the largest!")
elif (c > a and c > b) and (c != a and c != b):
print(c, " is the largest!")
else:
print("Some of the numbers are equal!")同じロジックをrx.condの三重の入れ子に移すとこうなります。「最大」とはほかの2つの数より大きいという意味なので、互いに異なるかのチェックは別にしなくて済みます。シャッフルを押して、同じ数が出る場合も確かめてみてください。分岐がこれより多くなるなら、Match のほうが読みやすくなります。
a=8 b=10 c=210 is the largest!
import random
class CondLargestState(rx.State):
a: int = 8
b: int = 10
c: int = 2
@rx.event
def shuffle(self):
self.a, self.b, self.c = (random.randint(1, 4) for _ in range(3))
rx.vstack(
rx.hstack(
rx.button("Shuffle", on_click=CondLargestState.shuffle),
rx.code(f"a={CondLargestState.a} b={CondLargestState.b} c={CondLargestState.c}"),
align="center",
),
rx.cond(
(CondLargestState.a > CondLargestState.b) & (CondLargestState.a > CondLargestState.c),
rx.text(f"{CondLargestState.a} is the largest!"),
rx.cond(
(CondLargestState.b > CondLargestState.a) & (CondLargestState.b > CondLargestState.c),
rx.text(f"{CondLargestState.b} is the largest!"),
rx.cond(
(CondLargestState.c > CondLargestState.a) & (CondLargestState.c > CondLargestState.b),
rx.text(f"{CondLargestState.c} is the largest!"),
rx.text("Some of the numbers are equal!"),
),
),
),
)ログインしているかどうかひとつで、右側の領域全体を切り替えます。真のときはアバター・名前・ログアウトボタンのまとまりを、偽のときはログインボタンひとつを表示します。
Shop
class CondLoginState(rx.State):
logged_in: bool = False
user: str = "Ada"
@rx.event
def log_in(self):
self.logged_in = True
@rx.event
def log_out(self):
self.logged_in = False
rx.hstack(
rx.text("Shop", weight="bold"),
rx.spacer(),
rx.cond(
CondLoginState.logged_in,
rx.hstack(
rx.avatar(fallback=CondLoginState.user[0], size="2", radius="full"),
rx.text(CondLoginState.user, size="2"),
rx.button("Log out", on_click=CondLoginState.log_out, size="1", variant="soft", color_scheme="gray"),
align="center",
),
rx.button("Log in", on_click=CondLoginState.log_in, size="2"),
),
width="100%",
max_width="420px",
align="center",
padding="10px 14px",
border=f"1px solid {rx.color('gray', 6)}",
border_radius="10px",
)工房ノート
rx.cond(条件, 真のとき, 偽のとき)。Python の if は State の値には使えない。
偽のときのコンポーネントは省略できる。値を2つ渡すとプロパティに入れる Var になる。
否定は ~、かつ・または は & · |。比較式は必ずかっこで囲む。
elif は rx.cond を重ねて。分岐が多ければ rx.match。
新しい授業・講座のお知らせを受け取る
この講座に授業が追加されたり、続きの講座が公開されたりしたらメールでお知らせします。
R
ReflexKR
触って学ぶPythonとReflex。すべての例はReflex 0.10.0で実際に動かして確認しています。
ReflexKRはバナー広告なし・無料で運営しています。役に立ったら、コーヒー一杯で応援してください。 ☕ コーヒーで応援する
アフィリエイトと支援について© 2026 ReflexKR · Since 2026 · CC BY-NC 4.0
質問と回答
この回について気になることを書き込んでください。すべての言語のページの質問がここに集まります。