メインコンテンツにスキップ
バージョン: 0.21

0.18.0 から 0.19.0 へ

Yew 0.19.0 では多くの変更が行われたため、この移行ガイドではすべての変更を網羅していません。

代わりに、最も影響の大きい変更のみが記載されており、残りは cargo によって検出されるはずです。

ほとんどのpropsに対する波括弧のhtml!要件

html!マクロの構文が更新され、ほとんどの場合、propsを波括弧で囲む必要が生じました。

let super_age = 1;
html!{
<JapaneseYew
age=super_age // ! Will throw an error
>
}

コミュニティから提供された、この更新を自動化するための正規表現がありますが、常に機能することを保証することはできません。

クロージャ(特に |_| 構文)に遭遇すると失敗します。

=(?![{">=\s])([^\s></]*(\s!{0,1}[=|&]{2}\s[^\s></]*)*) で検索

={$1} で置換

関数コンポーネント

関数コンポーネントは、構造体のコンポーネントよりも少ないボイラープレートでコンポーネントを作成できる新しい方法です。

この変更によってコードベースの変更が強制されることはありませんが、0.18から0.19に移行する際に、この移行期間を利用してコードベースでそれらを使い始める良い機会となるでしょう。

構造体のコンポーネントのライフサイクルメソッドとctx

構造体のコンポーネントもAPIに変更を受けました。

ShouldRenderはboolの優先に使用するため削除

ShouldRenderbool を優先するために削除され、コードベース全体で検索して置換するだけで済みます。

構造体のコンポーネントは、もはやpropsとlinkを所有していません。代わりに、ライフタイムメソッドで ctx: &Context<Self> 引数を受け取り、後で ctx.props() -> &Propertiesctx.link() -> &Scope<Self> にアクセスできます。

すべてのライフタイムメソッドが更新されたため、コンポーネントの構造体のフィールドから linkprops を削除する必要があります。

Componentトレイトのライフタイムメソッド

新しいAPIについては、Componentトレイトを参照してください

web-sys は再エクスポートされなくなりました

web-sys をプロジェクトの依存関係として追加し、必要な機能(EventWindow など)を1つずつ追加してください。

サービス

この更新中に、すべてのサービスは、gloo のようなコミュニティ主導のソリューションを優先して削除されました

これを完全に削除してください。yew-services は、外部リソースの呼び出しを容易にする抽象化レイヤーを追加します。これはすべて良いことですが、このレイヤーはYewに固有のものであるはずです。代わりに、フレームワークに依存しない抽象化が存在する方が良いでしょう。

  • ConsoleService 代わりに gloo-console または weblog を使用してください。
  • DialogService 代わりに gloo-dialogs を使用してください。
  • IntervalService 代わりに gloo-timers を使用してください。
  • KeyboardService yewの on* イベントハンドラーはすでにそれを処理しています。このサービスを使用すると、それによって提供される関数を呼び出すために NodeRef を使用する必要があるため、さらに面倒になります。
let onkeydown = Callback::from(|e| {
e.prevent_default();
todo!("use `e`, just like in service methods.");
});
html! {
<input {onkeydown} />
}
  • ResizeService 代わりに gloo-events を使用してリスナーをアタッチしてください。
  • StorageService 代わりに gloo-storage を使用してください。
  • TimeoutService 代わりに gloo-timers を使用してください。
  • WebSocketService 代わりに wasm-sockets または gloo-net を使用してください。
  • FetchService 代わりに reqwest または gloo-net を使用してください。

新しいクレート - yew-agent

Yewエージェントは別のクレートに移動されました。 yewエージェントの移行ガイド を参照してください

終わりに

このガイドですべてを網羅することができなかったことをお詫び申し上げます。これは本当に大きなアップデートであり、未解決の問題はRustコンパイラによって発行されるエラーメッセージで明確に説明されることを願っています。