Files
dioxus/packages/hooks/src/use_callback.rs
T
2023-10-14 14:32:08 -05:00

49 lines
1.1 KiB
Rust

use dioxus_core::ScopeState;
use std::future::Future;
#[macro_export]
macro_rules! use_callback {
// ($cx:ident, || || $($rest:tt)*) => { use_callback( $cx, (), |_| $($rest)* ) };
// ($cx:ident, || || $($rest:tt)*) => { use_callback( $cx, (), |_| $($rest)* ) };
($cx:ident, || $($rest:tt)*) => {
use_callback(
$cx,
move || $($rest)*
)
};
($cx:ident, |$($args:tt),* | $($rest:tt)*) => {
use_callback(
$cx,
move || $($rest)*
)
};
($cx:ident, $($rest:tt)*) => {
use_callback(
$cx,
move || $($rest)*
)
};
}
pub fn use_callback<T, R, F>(cx: &ScopeState, make: impl FnOnce() -> R) -> impl FnMut(T) + '_
where
R: FnMut(T) -> F + 'static,
F: Future<Output = ()> + 'static,
{
let mut hook = make();
move |evt| cx.spawn(hook(evt))
}
fn _it_works(cx: &ScopeState) {
let _p = use_callback(cx, || {
|()| async {
//
}
});
// let p = use_callback!(cx, || |evt| async {
// //
// });
}