第一个简单的 App

首先,创建一个新的 cargo 项目:

  1. cargo new yew-app

进入刚刚创建的目录。

现在,让我们在Cargo.toml文件中添加yew作为依赖项:

  1. [package]
  2. name = "yew-app"
  3. version = "0.1.0"
  4. edition = "2018"
  5. [dependencies]
  6. # 你可以在此处查看最新版本: https://crates.io/crates/yew
  7. yew = "0.18"

将以下代码复制到您的src/main.rs文件中:

  1. use yew::prelude::*;
  2. enum Msg {
  3. AddOne,
  4. }
  5. struct Model {
  6. // `ComponentLink` is like a reference to a component.
  7. // It can be used to send messages to the component
  8. link: ComponentLink<Self>,
  9. value: i64,
  10. }
  11. impl Component for Model {
  12. type Message = Msg;
  13. type Properties = ();
  14. fn create(_props: Self::Properties, link: ComponentLink<Self>) -> Self {
  15. Self {
  16. link,
  17. value: 0,
  18. }
  19. }
  20. fn update(&mut self, msg: Self::Message) -> ShouldRender {
  21. match msg {
  22. Msg::AddOne => {
  23. self.value += 1;
  24. // the value has changed so we need to
  25. // re-render for it to appear on the page
  26. true
  27. }
  28. }
  29. }
  30. fn change(&mut self, _props: Self::Properties) -> ShouldRender {
  31. // Should only return "true" if new properties are different to
  32. // previously received properties.
  33. // This component has no properties so we will always return "false".
  34. false
  35. }
  36. fn view(&self) -> Html {
  37. html! {
  38. <div>
  39. <button onclick=self.link.callback(|_| Msg::AddOne)>{ "+1" }</button>
  40. <p>{ self.value }</p>
  41. </div>
  42. }
  43. }
  44. }
  45. fn main() {
  46. yew::start_app::<Model>();
  47. }

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

最后,将index.html文件添加当前应用的根目录下:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8" />
  5. <title>Yew App</title>
  6. </head>
  7. </html>

运行你的应用程序!

如果尚未安装 Trunk,请执行以下操作:

  1. cargo install trunk wasm-bindgen-cli

wasm32-unknown-unknown添加为编译目标。 如果还未安装,请使用 Rustup 运行以下指令:

  1. rustup target add wasm32-unknown-unknown

现在,您所要做的就是运行以下命令:

  1. trunk serve

这将启动一个开发服务器,该服务器在您每次进行更改时都会更新应用程序。

常见问题

  • Trunk 安装失败:

    确保你已经安装了 openssl 的开发包。例如,Ubuntu 上的 libssl-dev 或 Fedora 上的 openssl-devel。