チュートリアル: MoonBit

Switch(複数条件)

複数の相互排他的な条件を処理します。

基本的な使い方

MoonBit ではパターンマッチングを使用して複数条件を処理:

using @server_dom { div, span, text }
using @luna { signal }

fn status_badge() -> @luna.Node {
  let status = signal("pending")

  div([
    match status.get() {
      "pending" => span(class_="yellow", [text("保留中")])
      "active" => span(class_="green", [text("アクティブ")])
      "error" => span(class_="red", [text("エラー")])
      _ => span([text("不明")])
    }
  ])
}

一般的なパターン

タブコンテンツ

fn tab_view() -> @luna.Node {
  let tab = signal("overview")

  div([
    nav([
      button(onclick=fn() { tab.set("overview") }, [text("概要")]),
      button(onclick=fn() { tab.set("details") }, [text("詳細")]),
      button(onclick=fn() { tab.set("reviews") }, [text("レビュー")]),
    ]),
    match tab.get() {
      "overview" => overview_panel()
      "details" => details_panel()
      "reviews" => reviews_panel()
      _ => div([])
    }
  ])
}

ステップウィザード

fn wizard() -> @luna.Node {
  let step = signal(1)

  div([
    match step.get() {
      1 => step1(on_next=fn() { step.set(2) })
      2 => step2(
        on_back=fn() { step.set(1) },
        on_next=fn() { step.set(3) },
      )
      3 => step3(
        on_back=fn() { step.set(2) },
        on_submit=handle_submit,
      )
      _ => div([])
    },
    p([text("ステップ " + step.get().to_string() + " / 3")]),
  ])
}

試してみよう

3つの状態(赤、黄、緑)を持つ信号機コンポーネントを作成し、それらを循環

次へ

onMount → について学ぶ