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

0.19.0 から 0.20.0 へ

start_app_as_body バリアントが削除されました

このボディ制御方法は、イベント登録と SSR ハイドレーションで問題を引き起こしていました。これらは削除されました。詳細は、github issueを参照してください。

新しい Hooks および Function Components API

Function Components と Hooks API は、異なるメカニズムで再実装されました

  • ユーザー定義のフックは、use_ という接頭辞を持ち、#[hook] 属性でマークされている必要があります。
  • フックが関数コンポーネントまたはユーザー定義のフックのトップレベルから呼び出されない場合、コンパイルエラーが報告されるようになりました。この制限は以前のバージョンの Yew にも存在していましたが、このバージョンではコンパイル時エラーとして報告されます。

自動メッセージバッチ処理

スケジューラは、ブラウザのイベントループの最後に開始されるようにスケジュールされるようになりました。その間にキューイングされたすべてのメッセージはバッチで実行されます。コンポーネント間のメッセージの実行順序は保証されなくなりましたが、同じコンポーネントに送信されたメッセージはFIFO順に認識されます。複数の更新がレンダリングにつながる場合、コンポーネントは一度だけレンダリングされます。

これは開発者にとって何を意味しますか?

構造体コンポーネントの場合、これは、2つの異なるコンポーネントに2つのメッセージを送信した場合、それらが送信された順序で確認されることは保証されないことを意味します。同じコンポーネントに2つのメッセージを送信した場合、それらは送信された順序でコンポーネントに渡されます。メッセージはコンポーネントにすぐに送信されないため、コンポーネントがメッセージを受信したときに、メッセージが作成されたときと同じ状態であると想定しないでください。

関数コンポーネントの場合、use_state(_eq)で状態を保存し、その状態の新しい値が前の値に依存する場合、use_reducer(_eq)に切り替えることをお勧めします。状態の新しい値は、コンポーネントが次にレンダリングされるまで表示/認識されません。リデューサーアクションは、構造体コンポーネントのメッセージと同様に機能し、ディスパッチされた順序でリデューサー関数に送信されます。リデューサー関数は、実行時に以前のすべての変更を確認できます。

Yew レンダラー

start_app*yew::Renderer に置き換えられました。

yew::Renderer を使用するには、csr 機能を有効にする必要があります。

コンポーネントの ref プロパティ

コンポーネントには ref プロパティがなくなりました。コンポーネントにノード参照を追加しようとすると、コンパイルエラーが発生します

以前は、コンポーネントに渡されたノード参照は、それによってレンダリングされた最初の要素にバインドされていました。この動作が必要な場合は、コンポーネントのプロパティに r#ref フィールドを追加し、手動でバインドすることをお勧めします

コンポーネントの changed メソッド

メソッド fn changed() に、古いプロパティを関数に提供するための新しい引数が追加されました。

古いメソッドのシグネチャは次のとおりでした

fn changed(&mut self, ctx: &Context<Self>) -> bool

新しいメソッドのシグネチャは次のようになりました

fn changed(&mut self, ctx: &Context<Self>, old_props: &Self::Properties) -> bool

この bash スクリプトを使用して、コード内で自動的に調整できます(このスクリプトを実行する前にコードを保存してください!)

perl -p -i -e  's/fn changed\(&mut self, (\w+): &Context<Self>\)/fn changed(&mut self, $1: &Context<Self>, _old_props: &Self::Properties)/g' $(find . -name \*.rs)