回调 (Callbacks)
回调函数用于在组件树中向上传递信息,以及在事件处理期间与其他组件(如代理或 DOM)进行通信。在内部,回调函数的类型只是一个 Fn
,并且被包装在 Rc
中,以便它们可以被廉价地克隆。
如果您想手动调用回调函数,可以使用 emit
函数。
use yew::{html, Component, Context, Html, Callback};
let cb: Callback<String, String> = Callback::from(move |name: String| {
format!("Bye {}", name)
});
let result = cb.emit(String::from("Bob")); // 调用回调函数
// web_sys::console::log_1(&result.into()); // 如果取消注释,将打印 "Bye Bob"
将回调函数作为属性传递
在 yew 中的一个常见模式是创建一个回调函数,并将其作为属性传递给子组件。
use yew::{function_component, html, Html, Properties, Callback};
#[derive(Properties, PartialEq)]
pub struct Props {
pub on_name_entry: Callback<String>,
}
#[function_component]
fn HelloWorld(props: &Props) -> Html {
props.on_name_entry.emit(String::from("Bob"));
html! { "Hello" }
}
// 然后提供属性 (Props)
#[function_component]
fn App() -> Html {
let on_name_entry: Callback<String> = Callback::from(move |name: String| {
let greeting = format!("Hey, {}!", name);
// web_sys::console::log_1(&greeting.into()); // 如果取消注释,这里会打印文本
});
html! { <HelloWorld {on_name_entry} /> }
}