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
>
}
let super_age = 1;
html!{
<JapaneseYew
age={super_age} // Correct
>
}
短縮形の初期化が追加されました
let age = 1;
html!{
<JapaneseYew
{age}
>
}
コミュニティから提供された、この更新を自動化するための正規表現がありますが、常に機能することを保証することはできません。
クロージャ(特に |_|
構文)に遭遇すると失敗します。
=(?![{">=\s])([^\s></]*(\s!{0,1}[=|&]{2}\s[^\s></]*)*)
で検索
={$1}
で置換
関数コンポーネント
関数コンポーネントは、構造体のコンポーネントよりも少ないボイラープレートでコンポーネントを作成できる新しい方法です。
この変更によってコードベースの変更が強制されることはありませんが、0.18
から0.19
に移行する際に、この移行期間を利用してコードベースでそれらを使い始める良い機会となるでしょう。
構造体のコンポーネントのライフサイクルメソッドとctx
構造体のコンポーネントもAPIに変更を受けました。
ShouldRenderはboolの優先に使用するため削除
ShouldRender
は bool
を優先するために削除され、コードベース全体で検索して置換するだけで済みます。
ctx、props、link
構造体のコンポーネントは、もはやpropsとlinkを所有していません。代わりに、ライフタイムメソッドで ctx: &Context<Self>
引数を受け取り、後で ctx.props() -> &Properties
と ctx.link() -> &Scope<Self>
にアクセスできます。
すべてのライフタイムメソッドが更新されたため、コンポーネントの構造体のフィールドから link
と props
を削除する必要があります。
Componentトレイトのライフタイムメソッド
新しいAPIについては、Componentトレイトを参照してください
web-sys
は再エクスポートされなくなりました
web-sys
をプロジェクトの依存関係として追加し、必要な機能(Event
や Window
など)を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コンパイラによって発行されるエラーメッセージで明確に説明されることを願っています。