mirror of
https://github.com/DioxusLabs/dioxus
synced 2024-12-25 12:03:08 +00:00
508c560320
This change switches back to the original `ctx<props>` syntax for commponents. This lets lifetime elision to remove the need to match exactly which lifetime (props or ctx) gets carried to the output. As such, `Props` is currently required to be static. It *is* possible to loosen this restriction, and will be done in the future, though only through adding metadata about the props through the Props derive macro. Implementing the IS_STATIC trait is unsafe, so the derive macro will do it through some heuristics. For now, this unlocks sharing vnodes from parents to children, enabling pass-thru components, fragments, portals, etc.
35 lines
827 B
Rust
35 lines
827 B
Rust
use std::collections::HashMap;
|
|
|
|
use dioxus_core::prelude::*;
|
|
use recoil::*;
|
|
|
|
const A_ITEMS: AtomHashMap<i32, i32> = |_| HashMap::new();
|
|
const B_ITEMS: AtomHashMap<i32, i32> = |_| HashMap::new();
|
|
|
|
const C_SELECTOR: SelectorFamily<i32, i32> = |api, key| {
|
|
let a = api.get(&A_ITEMS.select(&key));
|
|
let b = api.get(&B_ITEMS.select(&key));
|
|
a + b
|
|
};
|
|
|
|
const D_SELECTOR: SelectorFamilyBorrowed<i32, i32> = |api, key| -> &i32 {
|
|
let a = api.get(&A_ITEMS.select(&key));
|
|
a
|
|
};
|
|
|
|
static App: FC<()> = |ctx| {
|
|
use_init_recoil_root(ctx, |_| {});
|
|
|
|
let title = use_read(ctx, &C_SELECTOR);
|
|
|
|
rsx! { in ctx,
|
|
div {
|
|
"{title}"
|
|
// button { onclick: {next_light}, "Next light" }
|
|
}
|
|
}
|
|
};
|
|
|
|
fn main() {
|
|
wasm_bindgen_futures::spawn_local(dioxus_web::WebsysRenderer::start(App))
|
|
}
|