For(リストレンダリング)
リアクティブな更新で効率的にリストをレンダリングします。
基本的な使い方
using @server_dom { ul, li, text, for_each }
using @luna { signal }
fn todo_list() -> @luna.Node {
let todos = signal([
{ id: 1, text: "Luna を学ぶ" },
{ id: 2, text: "アプリを作る" },
{ id: 3, text: "デプロイ" },
])
ul([
for_each(
items=fn() { todos.get() },
render=fn(todo, _idx) {
li([text(todo.text)])
},
),
])
}
インデックス付き
現在のインデックスにアクセス:
for_each(
items=fn() { items.get() },
render=fn(item, idx) {
li([text((idx() + 1).to_string() + ". " + item.name)])
},
)
空リストのフォールバック
for_each(
items=fn() { items.get() },
fallback=p([text("アイテムがありません。")]),
render=fn(item, _) { item_view(item) },
)
リストの更新
アイテム追加
fn add_item() {
todos.update(fn(prev) {
prev.push({ id: next_id(), text: "New Item" })
prev
})
}
アイテム削除
fn remove_item(id : Int) {
todos.update(fn(prev) {
prev.filter(fn(item) { item.id != id })
})
}
試してみよう
以下を持つ Todo リストを作成:
新しい Todo を追加する入力
クリックで完了をトグル
完了済みを削除するボタン
次へ
Switch → について学ぶ