Closed7
Leptosを触ってみる
Leptosとは
Rustで作られたフレームワークをWASMで動かすフロントエンドフレームワークらしい
高速だぞとうたっている
資料
イメージ
こんな感じの書き味らしい
codesandboxでplaygroundが提供されている
ボイラープレート的なものがあったのでローカルで動かしてみる
# trunk : WASMで動かすWebアプリ用のバンドラ
# cargo-generate : gitリポジトリをテンプレートとして新規プロジェクトを作成
cargo install trunk cargo-generate
# 提供されているテンプレから作成。他にもstart-awsとかがある
# ドキュメント上だとOrganizationが `leptos-community` だったが `leptos-rs` にリダイレクトされてた
cargo generate --git https://github.com/leptos-community/start-csr
# 起動
trunk serve --port 3000 --open
起動した
コンポーネントの作成イメージ
use leptos::prelude::*;
#[component]
fn App() -> impl IntoView {
let (count, set_count) = signal(0);
view! {
<button
on:click=move |_| set_count.set(3)
>
"Click me: "
{count}
</button>
<p>
"Double count: "
{move || count.get() * 2}
</p>
}
}
リアクティブな値は signal
を使う。geter / setter がタプルで返ってくる
let (count, set_count) = signal(0);
view!
マクロを使ってJSX記法を使えるっぽい
リアクティブな値を使うときにはクロージャを使って関数にしてあげる必要がある
getterそのまま使うとリアクティブとして扱われず1度だけしか評価されない(getterはあくまで大元の値のクローンするだけ)
<p>
<strong>"Reactive: "</strong>
{move || count.get()}
</p>
<p>
<strong>"Reactive shorthand: "</strong>
{count}
</p>
<p>
<strong>"Not reactive: "</strong>
{count.get()}
</p>
getter / setterのバリエーション
- getter
- read / with / get
- setter
- write / update / set
ロックをかけたり値をクローンするなりいろいろ
所有権が厳密なので使い方もそうなるのはそれはそう
Vue / Reactなどに明るくないので同じような機能が提供されているかは知らない
Rustの書き味やら厳密さがありつつ、既存のフレームワークライクに書けるところは良さげ
ちゃんとものを作り始めるとつらみが出てきそうだし(多分)、まだv1にもなってないのでこれから色々変わってくるものではあるが、とりあえず雰囲気だけはしれた
このスクラップは2025/01/17にクローズされました