diff --git a/examples/framework_benchmark.rs b/examples/framework_benchmark.rs
index 2f4496d86..0a70bd25b 100644
--- a/examples/framework_benchmark.rs
+++ b/examples/framework_benchmark.rs
@@ -41,22 +41,22 @@ fn app(cx: Scope) -> Element {
div { class: "col-md-6",
div { class: "row",
ActionButton { name: "Create 1,000 rows", id: "run",
- onclick: move || items.set(Label::new_list(1_000)),
+ onclick: move |_| items.set(Label::new_list(1_000)),
}
ActionButton { name: "Create 10,000 rows", id: "runlots",
- onclick: move || items.set(Label::new_list(10_000)),
+ onclick: move |_| items.set(Label::new_list(10_000)),
}
ActionButton { name: "Append 1,000 rows", id: "add",
- onclick: move || items.write().extend(Label::new_list(1_000)),
+ onclick: move |_| items.write().extend(Label::new_list(1_000)),
}
ActionButton { name: "Update every 10th row", id: "update",
- onclick: move || items.write().iter_mut().step_by(10).for_each(|item| item.labels[2] = "!!!"),
+ onclick: move |_| items.write().iter_mut().step_by(10).for_each(|item| item.labels[2] = "!!!"),
}
ActionButton { name: "Clear", id: "clear",
- onclick: move || items.write().clear(),
+ onclick: move |_| items.write().clear(),
}
ActionButton { name: "Swap rows", id: "swaprows",
- onclick: move || items.write().swap(0, 998),
+ onclick: move |_| items.write().swap(0, 998),
}
}
}
@@ -91,7 +91,7 @@ fn app(cx: Scope) -> Element {
struct ActionButtonProps<'a> {
name: &'a str,
id: &'a str,
- onclick: &'a dyn Fn(),
+ onclick: EventHandler<'a>,
}
fn ActionButton<'a>(cx: Scope<'a, ActionButtonProps<'a>>) -> Element {
@@ -102,7 +102,7 @@ fn ActionButton<'a>(cx: Scope<'a, ActionButtonProps<'a>>) -> Element {
class:"btn btn-primary btn-block",
r#type: "button",
id: "{cx.props.id}",
- onclick: move |_| (cx.props.onclick)(),
+ onclick: move |_| cx.props.onclick.call(()),
"{cx.props.name}"
}
diff --git a/examples/pattern_model.rs b/examples/pattern_model.rs
index 550879c21..c679d1427 100644
--- a/examples/pattern_model.rs
+++ b/examples/pattern_model.rs
@@ -15,8 +15,6 @@
//! the RefCell will panic and crash. You can use `try_get_mut` or `.modify` to avoid this problem, or just not hold two
//! RefMuts at the same time.
-use std::sync::Arc;
-
use dioxus::desktop::wry::application::dpi::LogicalSize;
use dioxus::events::*;
use dioxus::prelude::*;
@@ -117,7 +115,7 @@ fn app(cx: Scope) -> Element {
#[derive(Props)]
struct CalculatorKeyProps<'a> {
name: &'a str,
- onclick: &'a dyn Fn(MouseEvent),
+ onclick: EventHandler<'a, MouseEvent>,
children: Element<'a>,
}
@@ -125,7 +123,7 @@ fn CalculatorKey<'a>(cx: Scope<'a, CalculatorKeyProps<'a>>) -> Element {
cx.render(rsx! {
button {
class: "calculator-key {cx.props.name}",
- onclick: move |e| (cx.props.onclick)(e),
+ onclick: move |e| cx.props.onclick.call(e),
&cx.props.children
}
})
diff --git a/packages/core-macro/src/rsx/component.rs b/packages/core-macro/src/rsx/component.rs
index 08dc39580..13bcd30d3 100644
--- a/packages/core-macro/src/rsx/component.rs
+++ b/packages/core-macro/src/rsx/component.rs
@@ -165,7 +165,7 @@ impl ToTokens for ContentField {
__cx.raw_text(format_args_f!(#s)).0
}),
ContentField::OnHandlerRaw(e) => tokens.append_all(quote! {
- __cx.bump().alloc(#e)
+ __cx.event_handler(#e)
}),
}
}
diff --git a/packages/core/src/nodes.rs b/packages/core/src/nodes.rs
index ed4a6b0df..9917d4094 100644
--- a/packages/core/src/nodes.rs
+++ b/packages/core/src/nodes.rs
@@ -316,29 +316,33 @@ pub struct Listener<'bump> {
pub event: &'static str,
/// The actual callback that the user specified
- pub(crate) callback: EventHandler<'bump>,
+ pub(crate) callback: InternalHandler<'bump>,
}
-/// The callback based into element event listeners.
-pub struct EventHandler<'bump> {
- pub callback: &'bump RefCell