跳至主要内容
版本: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 中使用它们。