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

スコープ

コンポーネントの Scope<_> API

コンポーネントの「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 {
// Create a callback that accepts some text and sends it
// to the component as the `Msg::Text` message variant.
let cb = ctx.link().callback(|text: String| Msg::Text(text));

// The previous line is needlessly verbose to make it clearer.
// It can be simplified it to this:
let cb = ctx.link().callback(Msg::Text);

// Will send `Msg::Text("Hello World!")` to the component.
cb.emit("Hello World!".to_owned());

html! {
// html here
}
}
}

batch_callback

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

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

`Option<Msg>` は、`Some` の場合は `send_message` を呼び出します。値が `None` の場合、何も起こりません。これは、状況によっては更新が不要な場合に使用できます。

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