yunomuのブログ

趣味のこと

Rust yew の function_component が動かない

 yewで遊ぶぞーとなって一番手こずったところ。

 yew 0.20.0ではyew::start_appが無くなっているので、yewの(古い)チュートリアルにあるコードはそもそも動かない。

 かといってdocsにあるExampleもそのままでは動かない。具体的にはyew::Renderer:<App>::new().render();の部分で could not find `Renderer` in `yew`と言われる。

docs.rs

 そのものズバリなissueで答えが出てた。

github.com

 Cargo.tomlファイルのdependenciesのyewの項目にfeaturesを指定するとよい。

yew = { version = "0.20.0", features = ["csr"] }

 よく見るとyewのdocsのRendercsrというfeaturesのタグが貼ってある。これそういう意味だったのか。つまりCargoのマニュアルをあまり真面目に読んでいなかったのが敗因。

 おまけ。function_componentとwasm_bindgenで動かす時のHelloWorldのサンプル:

src/lib.rs

use wasm_bindgen::prelude::wasm_bindgen;
use yew::prelude::{function_component, html, Html};

#[function_component(App)]
fn app() -> Html {
    html! {
        <div><h1>{"Hello, World!"}</h1></div>
    }
}

#[wasm_bindgen(start)]
pub fn run_app() {
    yew::Renderer::<App>::new().render();
}

Cargo.toml

[package]
name = "yew-app-fn"
version = "0.1.0"
edition = "2021"

[lib]
crate-type = ["cdylib", "rlib"]

[dependencies]
wasm-bindgen = "0.2.83"
yew = { version = "0.20.0", features = ["csr"] }