ToDoリスト、コメント、商品カードのように、同じ形が何度も繰り返される画面はリストのデータから描きます。この回では、Stateにあるリストを画面に描くrx.foreachを使います。
class ListState(rx.State):
items: list[str] = ["Apple", "Banana", "Cherry"]
def render_item(item: rx.Var[str]):
# Render a single item.
# Note that item here is a Var, not a str!
return rx.list.item(item)
def show_fruits():
return rx.list.unordered(
rx.foreach(ListState.items, render_item),
)localhost:3000
実行画面rx.foreachには2つのものを渡します。
ListState.itemsrender_item。かっこを付けずに、関数そのものを渡します。Reflexがリストの項目ごとにrender_itemを適用して、コンポーネントを作ります。あとでリストに項目が追加されたり削除されたりすると、画面のリストも一緒に変わります。これは6限目のフルーツバスケットで実際に確かめます。
render_itemが受け取るitemの型が、strではなくrx.Var[str]になっている点が重要です。
render_itemも画面の関数なので、アプリの起動時に一度だけ実行されます。その時点ではリストに何が入るかわからないため、itemは「あとで値が入る場所」を指すVarになっています。len(item)のようなPythonの組み込み関数は使えません。代わりに、ReflexがVar用に用意しているVar演算を使います。item.length()は文字数、item.upper()は大文字に変換した値です。これも4限目のテーマです。Pythonのリスト内包表記[rx.list.item(i) for i in ListState.items]も、同じ理由で動きません。Stateのリストを繰り返し処理するときは、常にrx.foreachを使います。
itemsにフルーツをあと2つ追加して、画面に表示されるか確かめてみましょう。render_itemがrx.list.itemの代わりにrx.badge(item)を返すように変えてみましょう。同じデータが違う見た目で描かれます。itemsにフルーツを追加するイベントハンドラを作ってみましょう。答えは6限目にあります。rx.foreachに渡す2つのものを説明できる。rx.foreachを使うことがわかる。新しい授業・講座のお知らせを受け取る
この講座に授業が追加されたり、続きの講座が公開されたりしたらメールでお知らせします。
R
ReflexKR
触って学ぶPythonとReflex。すべての例はReflex 0.10.0で実際に動かして確認しています。
ReflexKRはバナー広告なし・無料で運営しています。役に立ったら、コーヒー一杯で応援してください。 ☕ コーヒーで応援する
アフィリエイトと支援について© 2026 ReflexKR · Since 2026 · CC BY-NC 4.0
質問と回答
この回について気になることを書き込んでください。すべての言語のページの質問がここに集まります。