use_callback.rs 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. use dioxus_core::ScopeState;
  2. use std::future::Future;
  3. #[macro_export]
  4. macro_rules! use_callback {
  5. // ($cx:ident, || || $($rest:tt)*) => { use_callback( $cx, (), |_| $($rest)* ) };
  6. // ($cx:ident, || || $($rest:tt)*) => { use_callback( $cx, (), |_| $($rest)* ) };
  7. ($cx:ident, || $($rest:tt)*) => {
  8. use_callback(
  9. $cx,
  10. move || $($rest)*
  11. )
  12. };
  13. ($cx:ident, |$($args:tt),* | $($rest:tt)*) => {
  14. use_callback(
  15. $cx,
  16. move || $($rest)*
  17. )
  18. };
  19. ($cx:ident, $($rest:tt)*) => {
  20. use_callback(
  21. $cx,
  22. move || $($rest)*
  23. )
  24. };
  25. }
  26. pub fn use_callback<T, R, F>(cx: &ScopeState, make: impl FnOnce() -> R) -> impl FnMut(T) + '_
  27. where
  28. R: FnMut(T) -> F + 'static,
  29. F: Future<Output = ()> + 'static,
  30. {
  31. let mut hook = make();
  32. move |evt| cx.spawn(hook(evt))
  33. }
  34. fn _it_works(cx: &ScopeState) {
  35. let _p = use_callback(cx, || {
  36. |()| async {
  37. //
  38. }
  39. });
  40. // let p = use_callback!(cx, || |evt| async {
  41. // //
  42. // });
  43. }