Build a sample app

首先创建一个新的Rust库(重要:通过传入--lib 来创建一个,而不是一个二进制文件):

  1. cargo new --bin yew-app && cd yew-app

yewwasm-bindgen添加到您的依赖项中(最新版本请参阅此处

  1. [package]
  2. name = "yew-app"
  3. version = "0.1.0"
  4. authors = ["Yew App Developer <name@example.com>"]
  5. edition = "2018"
  6. [lib]
  7. crate-type = ["cdylib", "rlib"]
  8. [dependencies]
  9. yew = "0.17"
  10. wasm-bindgen = "0.2.67"

将以下模板复制到您的src/lib.rs文件中:

  1. use wasm_bindgen::prelude::*;
  2. use yew::prelude::*;
  3. struct Model {
  4. link: ComponentLink<Self>,
  5. value: i64,
  6. }
  7. enum Msg {
  8. AddOne,
  9. }
  10. impl Component for Model {
  11. type Message = Msg;
  12. type Properties = ();
  13. fn create(_: Self::Properties, link: ComponentLink<Self>) -> Self {
  14. Self {
  15. link,
  16. value: 0,
  17. }
  18. }
  19. fn update(&mut self, msg: Self::Message) -> ShouldRender {
  20. match msg {
  21. Msg::AddOne => self.value += 1
  22. }
  23. true
  24. }
  25. fn change(&mut self, _props: Self::Properties) -> ShouldRender {
  26. // 如果新传入的属性(Properties)与之前获取到的不同,就应该返回 "true"。
  27. // 当前组件没有属性,所以只需要返回 "false".
  28. false
  29. }
  30. fn view(&self) -> Html {
  31. html! {
  32. <div>
  33. <button onclick=self.link.callback(|_| Msg::AddOne)>{ "+1" }</button>
  34. <p>{ self.value }</p>
  35. </div>
  36. }
  37. }
  38. }
  39. #[wasm_bindgen(start)]
  40. pub fn run_app() {
  41. App::<Model>::new().mount_to_body();
  42. }

这份代码通过一个 Model 构建了你的根 组件,它会显示一个按钮,当你点击按钮时,Model 将会更新自己的状态。特别注意 main() 中的 App::<Model>::new().mount_to_body(),它会启动你的应用并将其挂载到页面的 <body> 标签中。如果你想使用任何动态属性来启动应用程序,则可以使用 App::<Model>::new().mount_to_body_with_props(..)

最后,在你的应用中新建一个static文件夹,然后将一个index.html文件添加到这个文件夹内:

  1. mkdir static
  1. <!doctype html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8">
  5. <title>Yew Sample App</title>
  6. <script type="module">
  7. import init from "./wasm.js"
  8. init()
  9. </script>
  10. </head>
  11. <body></body>
  12. </html>

运行你的应用程序!

最好是使用wasm-pack来启动和运行应用。如果还未安装wasm-pack,请先执行 cargo install wasm-pack 安装,接下来就可以用以下指令来构建和启动开发服务器:

  1. wasm-pack build --target web --out-name wasm --out-dir ./static

wasm-pack 会在 ./static目录下生成一个包,其中包含应用程序已编译的 WebAssembly ,以及一个 JavaScript 包装器,它将加载应用程序的 WebAssembly 二进制文件并运行它。

然后,使用您喜欢的Web服务器为./static下的文件提供服务。例如:

  1. cargo +nightly install miniserve
  2. miniserve ./static --index index.html