Add lazy contexts to signals

This commit is contained in:
Jonathan Kelley committed 2023-07-14 12:52:49 -07:00
1 parent 645706c7f4
commit 2d8841cf70
5 files changed
+40 -6

No files matched your search

+8 -2
View File
@@ -10,16 +10,22 @@ mod rt;
use dioxus_core::ScopeState;
pub use rt::*;
use crate::rt::claim_rt;
pub fn use_init_signal_rt(cx: &ScopeState) {
cx.use_hook(|| {
let rt = crate::rt::claim_rt(cx.schedule_update_any());
let rt = claim_rt(cx.schedule_update_any());
cx.provide_context(rt);
});
}
pub fn use_signal<T: 'static>(cx: &ScopeState, f: impl FnOnce() -> T) -> Signal<T> {
cx.use_hook(|| {
let rt: &'static SignalRt = cx.consume_context().unwrap();
let rt: &'static SignalRt = match cx.consume_context() {
Some(rt) => rt,
None => cx.provide_context(claim_rt(cx.schedule_update_any())),
};
let id = rt.init(f());
rt.subscribe(id, cx.scope_id());