diff --git a/packages/yew/src/html/component/lifecycle.rs b/packages/yew/src/html/component/lifecycle.rs
index ae07712ee1a..92056f2a6f6 100644
--- a/packages/yew/src/html/component/lifecycle.rs
+++ b/packages/yew/src/html/component/lifecycle.rs
@@ -301,9 +301,9 @@ impl Runnable for UpdateRunner {
if schedule_render {
scheduler::push_component_render(
state.comp_id,
- RenderRunner {
+ Box::new(RenderRunner {
state: self.state.clone(),
- },
+ }),
);
// Only run from the scheduler, so no need to call `scheduler::start()`
}
@@ -377,9 +377,9 @@ impl RenderRunner {
scheduler::push_component_render(
state.comp_id,
- RenderRunner {
+ Box::new(RenderRunner {
state: shared_state,
- },
+ }),
);
} else {
// We schedule a render after current suspension is resumed.
@@ -393,9 +393,9 @@ impl RenderRunner {
suspension.listen(Callback::from(move |_| {
scheduler::push_component_render(
comp_id,
- RenderRunner {
+ Box::new(RenderRunner {
state: shared_state.clone(),
- },
+ }),
);
scheduler::start();
}));
@@ -442,10 +442,10 @@ impl RenderRunner {
scheduler::push_component_rendered(
state.comp_id,
- RenderedRunner {
+ Box::new(RenderedRunner {
state: self.state.clone(),
first_render,
- },
+ }),
first_render,
);
}
diff --git a/packages/yew/src/html/component/scope.rs b/packages/yew/src/html/component/scope.rs
index bbcc0435e7c..04582114fb9 100644
--- a/packages/yew/src/html/component/scope.rs
+++ b/packages/yew/src/html/component/scope.rs
@@ -211,14 +211,14 @@ mod feat_ssr {
scheduler::push_component_create(
self.id,
- CreateRunner {
+ Box::new(CreateRunner {
initial_render_state: state,
props,
scope: self.clone(),
- },
- RenderRunner {
+ }),
+ Box::new(RenderRunner {
state: self.state.clone(),
- },
+ }),
);
scheduler::start();
@@ -227,12 +227,12 @@ mod feat_ssr {
let self_any_scope = AnyScope::from(self.clone());
html.render_to_string(w, &self_any_scope).await;
- scheduler::push_component_destroy(DestroyRunner {
+ scheduler::push_component_destroy(Box::new(DestroyRunner {
state: self.state.clone(),
#[cfg(feature = "csr")]
parent_to_detach: false,
- });
+ }));
scheduler::start();
}
}
@@ -347,10 +347,10 @@ mod feat_csr_ssr {
}
pub(super) fn push_update(&self, event: UpdateEvent) {
- scheduler::push_component_update(UpdateRunner {
+ scheduler::push_component_update(Box::new(UpdateRunner {
state: self.state.clone(),
event,
- });
+ }));
// Not guaranteed to already have the scheduler started
scheduler::start();
}
@@ -418,14 +418,14 @@ mod feat_csr {
scheduler::push_component_create(
self.id,
- CreateRunner {
+ Box::new(CreateRunner {
initial_render_state: state,
props,
scope: self.clone(),
- },
- RenderRunner {
+ }),
+ Box::new(RenderRunner {
state: self.state.clone(),
- },
+ }),
);
// Not guaranteed to already have the scheduler started
scheduler::start();
@@ -473,10 +473,10 @@ mod feat_csr {
/// Process an event to destroy a component
fn destroy(self, parent_to_detach: bool) {
- scheduler::push_component_destroy(DestroyRunner {
+ scheduler::push_component_destroy(Box::new(DestroyRunner {
state: self.state,
parent_to_detach,
- });
+ }));
// Not guaranteed to already have the scheduler started
scheduler::start();
}
@@ -486,10 +486,10 @@ mod feat_csr {
}
fn shift_node(&self, parent: Element, next_sibling: NodeRef) {
- scheduler::push_component_update(UpdateRunner {
+ scheduler::push_component_update(Box::new(UpdateRunner {
state: self.state.clone(),
event: UpdateEvent::Shift(parent, next_sibling),
- })
+ }))
}
}
}
diff --git a/packages/yew/src/scheduler.rs b/packages/yew/src/scheduler.rs
index dda231c29cd..a3ec5459021 100644
--- a/packages/yew/src/scheduler.rs
+++ b/packages/yew/src/scheduler.rs
@@ -66,30 +66,30 @@ mod feat_csr_ssr {
/// Push a component creation, first render and first rendered [Runnable]s to be executed
pub(crate) fn push_component_create(
component_id: usize,
- create: impl Runnable + 'static,
- first_render: impl Runnable + 'static,
+ create: Box,
+ first_render: Box,
) {
with(|s| {
- s.create.push(Box::new(create));
- s.render_first.insert(component_id, Box::new(first_render));
+ s.create.push(create);
+ s.render_first.insert(component_id, first_render);
});
}
/// Push a component destruction [Runnable] to be executed
- pub(crate) fn push_component_destroy(runnable: impl Runnable + 'static) {
- with(|s| s.destroy.push(Box::new(runnable)));
+ pub(crate) fn push_component_destroy(runnable: Box) {
+ with(|s| s.destroy.push(runnable));
}
/// Push a component render and rendered [Runnable]s to be executed
- pub(crate) fn push_component_render(component_id: usize, render: impl Runnable + 'static) {
+ pub(crate) fn push_component_render(component_id: usize, render: Box) {
with(|s| {
- s.render.insert(component_id, Box::new(render));
+ s.render.insert(component_id, render);
});
}
/// Push a component update [Runnable] to be executed
- pub(crate) fn push_component_update(runnable: impl Runnable + 'static) {
- with(|s| s.update.push(Box::new(runnable)));
+ pub(crate) fn push_component_update(runnable: Box) {
+ with(|s| s.update.push(runnable));
}
}
@@ -102,12 +102,10 @@ mod feat_csr {
pub(crate) fn push_component_rendered(
component_id: usize,
- rendered: impl Runnable + 'static,
+ rendered: Box,
first_render: bool,
) {
with(|s| {
- let rendered = Box::new(rendered);
-
if first_render {
s.rendered_first.insert(component_id, rendered);
} else {