R

ReflexKR

Reflex公式ドキュメント

触って覚えるReflexの基本

·

講座の概要

1

押すと変わる:Stateとイベント

2

出たり消えたり:条件付きレンダリング

3

リストを描く:rx.foreach

4

なぜifが使えない?コンパイル時と実行時

5

見た目を整える:コンポーネント、props、スタイル

6

アプリとページ、そしてフルーツバスケット

触って覚えるReflexの基本
6限目

時間 0:34–0:40

アプリとページ、そしてフルーツバスケット

最後の回です。これまで作ってきた画面の関数を実際のURLに結びつける方法を見たあと、1〜5限目で学んだことをすべて組み合わせて、小さなアプリを1つ完成させます。

6-1. アプリとページ (2分)

Reflexアプリはrx.Appで作り、画面の関数をadd_pageでURL(route)に結びつけます。

def index():
    return rx.text("Root Page")


app = rx.App()
app.add_page(index, route="/")
  • app = rx.App()は、メインファイルのいちばん外側(トップレベル)に置く必要があります。Reflexはappという名前でアプリを探します。
  • route="/"はサイトのトップページです。app.add_page(about, route="/about")のように、ページをどんどん追加できます。
  • routeを省略すると、関数名がそのままURLになります。indexは/、aboutは/aboutです。

6-2. 総まとめ:フルーツバスケット (4分)

ボタンでフルーツを入れたり出したりするバスケットです。短いコードですが、この講座の概念がすべて詰まっています。

FRUITS = ["Apple", "Banana", "Cherry", "Grape", "Mango", "Peach"]


class BasketState(rx.State):
    basket: list[str] = []

    @rx.event
    def add_fruit(self):
        # Event handlers run real Python: pick the next fruit in the list.
        self.basket.append(FRUITS[len(self.basket) % len(FRUITS)])

    @rx.event
    def remove_last(self):
        if self.basket:
            self.basket.pop()


def fruit_basket():
    return rx.vstack(
        rx.hstack(
            rx.heading("My basket", as_="h2", size="5"),
            # Var operations: .length() and % work on vars in components.
            rx.badge(BasketState.basket.length()),
            rx.cond(
                BasketState.basket.length() % 2 == 0,
                rx.badge("even", color_scheme="green"),
                rx.badge("odd", color_scheme="orange"),
            ),
            align="center",
        ),
        rx.cond(
            BasketState.basket.length() > 0,
            rx.list.unordered(rx.foreach(BasketState.basket, rx.list.item)),
            rx.text("The basket is empty.", color_scheme="gray"),
        ),
        rx.hstack(
            rx.button("Add fruit", on_click=BasketState.add_fruit),
            rx.button("Remove last", on_click=BasketState.remove_last, variant="soft"),
        ),
        align="start",
    )


app = rx.App()
app.add_page(fruit_basket, route="/")

localhost:3000

操作してみよう

My basket

0even

The basket is empty.

Add fruitとRemove lastを押してみてください。個数、偶数・奇数のバッジ、リストが一緒に変わります。

コードの各部分が、どの回で学んだものかを確認してみましょう。

コード概念回
basket: list[str] = []変化するデータを入れるstate var1限目
on_click=BasketState.add_fruitイベントトリガーとハンドラ1限目
rx.cond(... > 0, リスト, "empty")条件付きレンダリング2限目
rx.foreach(BasketState.basket, rx.list.item)リストのレンダリング。コンポーネントの関数をそのまま渡しても構いません3限目
ハンドラ内のlen(self.basket)、if実行時に動く本物のPython4限目
画面の.length()、% 2 == 0コンパイル時に使うVar演算4限目
variant="soft"、color_scheme="gray"propsで見た目を整える5限目
app.add_page(fruit_basket, route="/")ページの登録6限目

同じlenが、ハンドラでは使えるのに画面では.length()に変わる点に注目してください。4限目の「いつ実行されるの?」という問いに答えられれば、Reflexの基本はすべて身についています。

次のステップ

基本が身についたら、いよいよ本格的なアプリを作ってみましょう。

  • Reflexで始めるPythonフルスタックWeb開発:このサイトの4時間の講座です。テーブル、フォーム、ダイアログ、チャートを備えた顧客管理アプリをゼロから作ります。
  • Chat appチュートリアル(英語):AIの回答をリアルタイムで受け取って表示するチャットアプリを作ります。
  • VarとVar演算(英語):この講座で少し触れたVar演算の一覧です。
  • イベントとページ(英語):さらに多くのトリガーとルーティングの方法を紹介しています。
  • How Reflex works(英語):4限目のコンパイル時と実行時が、内部でどのように動いているかを解説しています。

練習問題

  1. バスケットに同じフルーツが2回入らないように、add_fruitを直してみましょう。ハンドラの中なので、if fruit not in self.basketが使えます。
  2. 「Clear」ボタンを追加して、バスケットを一度に空にしてみましょう。
  3. バスケットに5個以上入ったら「Full!」バッジが表示されるようにしてみましょう。画面のコードなので、Var演算とrx.condを使います。

この回のチェックリスト

  • rx.Appとadd_pageでページを登録できる。
  • フルーツバスケットのコードの各行が、どの概念にあたるかを説明できる。
  • 同じ計算でも、ハンドラで行う場合と画面で行う場合とで書き方が違う理由がわかる。

← 前へ

5限目 · 見た目を整える:コンポーネント、props、スタイル

新しい授業・講座のお知らせを受け取る

この講座に授業が追加されたり、続きの講座が公開されたりしたらメールでお知らせします。

収集項目:メールアドレス・目的:この講座の新しい授業・公開のお知らせ・保有期間:解除のご依頼まで。他の目的には使わず、第三者にも提供しません。お知らせメールに返信いただければすぐに削除します。

質問と回答

この回について気になることを書き込んでください。すべての言語のページの質問がここに集まります。

リンクや書式なしで、そのままの文字で表示されます。

R

ReflexKR

触って学ぶPythonとReflex。すべての例はReflex 0.10.0で実際に動かして確認しています。

ReflexKRはバナー広告なし・無料で運営しています。役に立ったら、コーヒー一杯で応援してください。 ☕ コーヒーで応援する

アフィリエイトと支援について
한국어English日本語简体中文EspañolDeutsch

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

Built with Reflex