From 74e33fa4c2607ca5dd0e15fcd0565162445a87ea Mon Sep 17 00:00:00 2001 From: Leo dev Date: Fri, 30 Jan 2026 23:00:02 +0100 Subject: [PATCH] Frontend generate children --- examples/benchmark.rs | 2 +- examples/hello_world.rs | 2 +- examples/simple_benchmark.rs | 2 +- examples/simple_example.rs | 4 ++-- src/frontend.rs | 9 ++++++++- 5 files changed, 13 insertions(+), 6 deletions(-) diff --git a/examples/benchmark.rs b/examples/benchmark.rs index 6b2e8a2..4d45b4f 100644 --- a/examples/benchmark.rs +++ b/examples/benchmark.rs @@ -50,5 +50,5 @@ fn BenchmarkApp(cx: &Arc, items: &usize) -> View { "Hello, world!" } } - .view(cx.clone()) + .view(&cx) } diff --git a/examples/hello_world.rs b/examples/hello_world.rs index 7bb27da..0a9850d 100644 --- a/examples/hello_world.rs +++ b/examples/hello_world.rs @@ -12,5 +12,5 @@ fn App(cx: &Arc) -> View { rsx! { "Hello World" } - .view(cx.clone()) + .view(&cx) } diff --git a/examples/simple_benchmark.rs b/examples/simple_benchmark.rs index 539eeaf..e902b10 100644 --- a/examples/simple_benchmark.rs +++ b/examples/simple_benchmark.rs @@ -17,5 +17,5 @@ fn App(cx: &Arc) -> View { rsx! { "Hello, world!" } - .view(cx.clone()) + .view(&cx) } diff --git a/examples/simple_example.rs b/examples/simple_example.rs index 8fc4bb0..fc453ff 100644 --- a/examples/simple_example.rs +++ b/examples/simple_example.rs @@ -12,10 +12,10 @@ fn App(cx: &Arc) -> View { rsx! { MyComponent { "Hello world!" } } - .view(cx.clone()) + .view(&cx) } #[component] fn MyComponent(cx: &Arc, children: &Rsx) -> View { - children.view(cx.clone()) + children.view(&cx) } diff --git a/src/frontend.rs b/src/frontend.rs index bcabbb5..11a10f2 100644 --- a/src/frontend.rs +++ b/src/frontend.rs @@ -12,6 +12,7 @@ pub enum RsxScope { Arc) + Send + Sync>, Vec>, ), + Child(Rsx), } pub struct Rsx(Vec); @@ -34,7 +35,7 @@ impl Rsx { .push(RsxScope::Dynamic(Arc::new(drawer), dependencies)); } - pub fn view(&self, context: Arc) -> View { + pub fn generate_children(&self, context: &Arc) { let executor = context.get_executor(); for scope in &self.0 { @@ -51,10 +52,16 @@ impl Rsx { &dependencies.iter().map(|d| d.as_ref()).collect::>(), ); } + RsxScope::Child(child) => child.generate_children(context), } } + } + pub fn view(&self, context: &Arc) -> View { let context = context.clone(); + + self.generate_children(&context); + Arc::new({ move |ctx| { context.draw_children(ctx);