メインコンテンツまでスキップ
Version: Next

スコープ

コンポーネントの Scope<_> インターフェース

Scope は、メッセージを介してコールバックを作成し、自身を更新するメカニズムです。コンポーネントに渡されるコンテキストオブジェクトで link() を呼び出すことで、その参照を取得します。

send_message

この関数は、コンポーネントにメッセージを送信できます。メッセージは update メソッドによって処理され、コンポーネントが再レンダリングするかどうかを決定します。

send_message_batch

この関数は、コンポーネントに複数のメッセージを同時に送信できます。これは send_message に似ていますが、任意のメッセージが update メソッドで true を返す場合、バッチ内のすべてのメッセージの処理が完了した後にコンポーネントが再レンダリングされます。

指定された引数ベクターが空の場合、この関数は何も実行しません。

callback

コールバックを作成し、実行時にコンポーネントにメッセージを送信します。内部的には、提供されたクロージャが返すメッセージを使用して send_message を呼び出します。

use yew::{html, Component, Context, Html};

enum Msg {
Text(String),
}

struct Comp;

impl Component for Comp {

type Message = Msg;
type Properties = ();

fn create(_ctx: &Context<Self>) -> Self {
Self
}

fn view(&self, ctx: &Context<Self>) -> Html {
// テキストを受け取り、それを `Msg::Text` メッセージバリアントとしてコンポーネントに送信するコールバックを作成します。
let cb = ctx.link().callback(|text: String| Msg::Text(text));

// 上の行は冗長であり、より明確にするために次のように簡略化できます:
let cb = ctx.link().callback(Msg::Text);

// `Msg::Text("Hello World!")` をコンポーネントに送信します。
cb.emit("Hello World!".to_owned());

html! {
// ここに HTML を配置
}
}
}

batch_callback

バッチメッセージを送信するコールバックを作成します。このメソッドに渡されるクロージャはメッセージを返す必要はありません。代わりに、クロージャは Vec<Msg> または Option<Msg> を返すことができます。ここで、Msg はコンポーネントのメッセージタイプです。

Vec<Msg> はバッチメッセージとして扱われ、内部的に send_message_batch を使用します。

Option<Msg> は値が Some の場合に send_message を呼び出します。値が None の場合は何も実行しません。これは、更新が不要な場合に使用できます。

これは、これらの型に対してのみ実装された SendAsMessage トレイトを使用して実現されています。独自の型に対して SendAsMessage を実装することで、batch_callback でそれらを使用できるようになります。