MoonBit API

Render

VNode から HTML 文字列へのレンダリング。

rendertostring

VNode を HTML 文字列に変換します。

let node = div(class="container", [
  h1([text("Hello, World!")]),
  p([text("Welcome to Luna.")])
])

let html = @render.render_to_string(node)
// <div class="container"><h1>Hello, World!</h1><p>Welcome to Luna.</p></div>

VNode 型

pub enum Node[E] {
  Element(VElement[E])      // HTML 要素
  Text(String)              // 静的テキスト
  DynamicText(() -> String) // 動的テキスト
  Fragment(Array[Node[E]])  // フラグメント
  Show(...)                 // 条件付きレンダリング
  For(...)                  // リストレンダリング
  Island(VIsland[E])        // Hydration 境界
  WcIsland(VWcIsland[E])    // Web Components Island
  Async(VAsync[E])          // 非同期ノード
}

Attr 型

pub enum Attr[E] {
  VStatic(String)           // 静的値
  VDynamic(() -> String)    // Signal 連動
  VHandler(EventHandler[E]) // イベントハンドラ
  VAction(String)           // 宣言的アクション
}

ヘルパー関数

// 要素作成
div(class="foo", [text("Hello")])
span(id="bar", [])
button(onclick=handler, [text("Click")])

// 属性
attr_static("value")
attr_dynamic(fn() { signal.get() })

// テキスト
text("Static text")
text_dyn(fn() { signal.get().to_string() })