From 6818bbe10ad4297c5092ee47f3d685265dd76dbe Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Wed, 31 Jan 2024 16:33:53 -0800 Subject: [PATCH] Make use_future take an impl FnMut + 'static, don't include router prelude when we don't need to --- examples/clock.rs | 2 +- examples/crm.rs | 1 - examples/flat_router.rs | 1 - examples/link.rs | 1 - examples/openid_connect_demo/src/main.rs | 2 -- examples/openid_connect_demo/src/router.rs | 1 - examples/openid_connect_demo/src/views/header.rs | 2 +- examples/query_segments.rs | 1 - examples/router.rs | 1 - examples/signals.rs | 2 +- examples/simple_router.rs | 1 - examples/streams.rs | 2 +- examples/suspense.rs | 2 +- packages/desktop/examples/stress.rs | 2 +- packages/fullstack/examples/axum-router/src/main.rs | 1 - packages/fullstack/examples/static-hydrated/src/main.rs | 1 - packages/hooks/src/use_future.rs | 7 ++++--- packages/native-core/examples/simple_dioxus.rs | 2 +- packages/router/examples/simple_routes.rs | 1 - packages/router/examples/static_generation.rs | 1 - packages/router/tests/via_ssr/link.rs | 1 - packages/signals/examples/dependancies.rs | 2 +- 22 files changed, 12 insertions(+), 25 deletions(-) diff --git a/examples/clock.rs b/examples/clock.rs index 88d59848a..b48a4053f 100644 --- a/examples/clock.rs +++ b/examples/clock.rs @@ -7,7 +7,7 @@ fn main() { fn app() -> Element { let mut count = use_signal(|| 0); - use_future(|| async move { + use_future(move || async move { loop { tokio::time::sleep(std::time::Duration::from_millis(10)).await; count += 1; diff --git a/examples/crm.rs b/examples/crm.rs index 3ae23fc6a..d9f2c9a38 100644 --- a/examples/crm.rs +++ b/examples/crm.rs @@ -1,6 +1,5 @@ //! Tiny CRM: A port of the Yew CRM example to Dioxus. use dioxus::prelude::*; -use dioxus::router::prelude::*; fn main() { LaunchBuilder::new() diff --git a/examples/flat_router.rs b/examples/flat_router.rs index 35175cae7..a981e4fb0 100644 --- a/examples/flat_router.rs +++ b/examples/flat_router.rs @@ -1,5 +1,4 @@ use dioxus::prelude::*; -use dioxus::router::prelude::*; fn main() { launch(|| { diff --git a/examples/link.rs b/examples/link.rs index fb6e207ae..f11408c2e 100644 --- a/examples/link.rs +++ b/examples/link.rs @@ -1,5 +1,4 @@ use dioxus::prelude::*; -use dioxus::router::prelude::*; fn main() { launch_desktop(App); diff --git a/examples/openid_connect_demo/src/main.rs b/examples/openid_connect_demo/src/main.rs index 05f38a2be..af5aad323 100644 --- a/examples/openid_connect_demo/src/main.rs +++ b/examples/openid_connect_demo/src/main.rs @@ -14,8 +14,6 @@ pub(crate) mod views; use oidc::{AuthRequestState, AuthTokenState}; use router::Route; -use dioxus::router::prelude::*; - use crate::{ constants::{DIOXUS_FRONT_AUTH_REQUEST, DIOXUS_FRONT_AUTH_TOKEN}, oidc::ClientState, diff --git a/examples/openid_connect_demo/src/router.rs b/examples/openid_connect_demo/src/router.rs index ca4ce9158..8f4b1b36a 100644 --- a/examples/openid_connect_demo/src/router.rs +++ b/examples/openid_connect_demo/src/router.rs @@ -1,6 +1,5 @@ use crate::views::{header::AuthHeader, home::Home, login::Login, not_found::NotFound}; use dioxus::prelude::*; -use dioxus::router::prelude::*; #[derive(Routable, Clone)] pub enum Route { diff --git a/examples/openid_connect_demo/src/views/header.rs b/examples/openid_connect_demo/src/views/header.rs index c5c9fadc2..5c40cd674 100644 --- a/examples/openid_connect_demo/src/views/header.rs +++ b/examples/openid_connect_demo/src/views/header.rs @@ -127,7 +127,7 @@ pub fn RefreshToken(cx: Scope) -> Element { #[component] pub fn LoadClient() -> Element { - let init_client_future = use_future(|| async move { init_oidc_client().await }); + let init_client_future = use_future(move || async move { init_oidc_client().await }); let fermi_client: &UseAtomRef = use_atom_ref(&FERMI_CLIENT); cx.render(match init_client_future.value() { Some(client_props) => match client_props { diff --git a/examples/query_segments.rs b/examples/query_segments.rs index 16c68f256..3f7542970 100644 --- a/examples/query_segments.rs +++ b/examples/query_segments.rs @@ -5,7 +5,6 @@ //! //! Run `dx serve` and navigate to `http://localhost:8080/blog?name=John&surname=Doe` use dioxus::prelude::*; -use dioxus::router::prelude::*; use std::fmt::Display; #[derive(Routable, Clone)] diff --git a/examples/router.rs b/examples/router.rs index ae4b7de91..5230d92a6 100644 --- a/examples/router.rs +++ b/examples/router.rs @@ -1,5 +1,4 @@ use dioxus::prelude::*; -use dioxus::router::prelude::*; fn main() { launch_desktop(|| { diff --git a/examples/signals.rs b/examples/signals.rs index 981853e57..0a2cda7e3 100644 --- a/examples/signals.rs +++ b/examples/signals.rs @@ -29,7 +29,7 @@ fn app() -> Element { } // use_future will spawn an infinitely running future that can be started and stopped - use_future(|| async move { + use_future(move || async move { loop { if running() { count += 1; diff --git a/examples/simple_router.rs b/examples/simple_router.rs index f4cc1d115..7ad44fbb3 100644 --- a/examples/simple_router.rs +++ b/examples/simple_router.rs @@ -1,7 +1,6 @@ #![allow(non_snake_case)] use dioxus::prelude::*; -use dioxus::router::prelude::*; #[derive(Routable, Clone, PartialEq)] enum Route { diff --git a/examples/streams.rs b/examples/streams.rs index ae6c67ca1..8f692596a 100644 --- a/examples/streams.rs +++ b/examples/streams.rs @@ -9,7 +9,7 @@ fn main() { fn app() -> Element { let mut count = use_signal(|| 10); - use_future(|| async move { + use_future(move || async move { let mut stream = some_stream(); while let Some(second) = stream.next().await { diff --git a/examples/suspense.rs b/examples/suspense.rs index 59cc59436..fec880751 100644 --- a/examples/suspense.rs +++ b/examples/suspense.rs @@ -50,7 +50,7 @@ fn app() -> Element { /// Suspense is achieved my moving the future into only the component that /// actually renders the data. fn Doggo() -> Element { - let fut = use_future(|| async move { + let fut = use_future(move || async move { #[derive(serde::Deserialize)] struct DogApi { message: String, diff --git a/packages/desktop/examples/stress.rs b/packages/desktop/examples/stress.rs index f00b4091e..90dd7947e 100644 --- a/packages/desktop/examples/stress.rs +++ b/packages/desktop/examples/stress.rs @@ -7,7 +7,7 @@ fn main() { fn app() -> Element { let mut state = use_signal(|| 0); - use_future(|| async move { + use_future(move || async move { loop { state += 1; tokio::time::sleep(std::time::Duration::from_millis(1)).await; diff --git a/packages/fullstack/examples/axum-router/src/main.rs b/packages/fullstack/examples/axum-router/src/main.rs index 8989c5a86..c9eaba742 100644 --- a/packages/fullstack/examples/axum-router/src/main.rs +++ b/packages/fullstack/examples/axum-router/src/main.rs @@ -5,7 +5,6 @@ //! ``` use dioxus::prelude::*; -use dioxus_router::prelude::*; fn main() { let config = LaunchBuilder::fullstack(); diff --git a/packages/fullstack/examples/static-hydrated/src/main.rs b/packages/fullstack/examples/static-hydrated/src/main.rs index 2c18a2943..1478833dd 100644 --- a/packages/fullstack/examples/static-hydrated/src/main.rs +++ b/packages/fullstack/examples/static-hydrated/src/main.rs @@ -7,7 +7,6 @@ #![allow(unused)] use dioxus::prelude::*; -use dioxus::router::prelude::*; use dioxus_fullstack::{launch, prelude::*}; use serde::{Deserialize, Serialize}; diff --git a/packages/hooks/src/use_future.rs b/packages/hooks/src/use_future.rs index e0a28e925..465cd7f48 100644 --- a/packages/hooks/src/use_future.rs +++ b/packages/hooks/src/use_future.rs @@ -1,5 +1,5 @@ #![allow(missing_docs)] -use crate::{use_hook_did_run, use_signal}; +use crate::{use_callback, use_hook_did_run, use_signal}; use dioxus_core::{ prelude::{spawn, use_drop, use_hook}, Task, @@ -11,15 +11,16 @@ use std::future::Future; /// A hook that allows you to spawn a future /// /// Does not regenerate the future when dependencies change. -pub fn use_future(mut future: impl FnMut() -> F) -> UseFuture +pub fn use_future(future: impl FnMut() -> F + 'static) -> UseFuture where F: Future + 'static, { + let mut callback = use_callback(future); let mut state = use_signal(|| UseFutureState::Pending); // Create the task inside a copyvalue so we can reset it in-place later let task = use_hook(|| { - let fut = future(); + let fut = callback.call(); CopyValue::new(spawn(async move { fut.await; state.set(UseFutureState::Complete); diff --git a/packages/native-core/examples/simple_dioxus.rs b/packages/native-core/examples/simple_dioxus.rs index ac6aa9f71..afb9fe487 100644 --- a/packages/native-core/examples/simple_dioxus.rs +++ b/packages/native-core/examples/simple_dioxus.rs @@ -169,7 +169,7 @@ fn main() -> Result<(), Box> { fn app() -> Element { let mut count = use_signal(|| 0); - use_future(|| async move { + use_future(move || async move { loop { tokio::time::sleep(std::time::Duration::from_secs(1)).await; count += 1; diff --git a/packages/router/examples/simple_routes.rs b/packages/router/examples/simple_routes.rs index d1bd6686a..deefd35e6 100644 --- a/packages/router/examples/simple_routes.rs +++ b/packages/router/examples/simple_routes.rs @@ -1,5 +1,4 @@ use dioxus::prelude::*; -use dioxus::router::prelude::*; use std::str::FromStr; #[cfg(feature = "liveview")] diff --git a/packages/router/examples/static_generation.rs b/packages/router/examples/static_generation.rs index bea43ff12..db0182bb9 100644 --- a/packages/router/examples/static_generation.rs +++ b/packages/router/examples/static_generation.rs @@ -1,7 +1,6 @@ use std::time::Duration; use dioxus::prelude::*; -use dioxus::router::prelude::*; use dioxus_ssr::incremental::{DefaultRenderer, IncrementalRendererConfig}; diff --git a/packages/router/tests/via_ssr/link.rs b/packages/router/tests/via_ssr/link.rs index d332e1adf..66b76c7c4 100644 --- a/packages/router/tests/via_ssr/link.rs +++ b/packages/router/tests/via_ssr/link.rs @@ -1,5 +1,4 @@ use dioxus::prelude::*; -use dioxus_router::prelude::*; use std::str::FromStr; fn prepare() -> String diff --git a/packages/signals/examples/dependancies.rs b/packages/signals/examples/dependancies.rs index a2447fcce..34159d34a 100644 --- a/packages/signals/examples/dependancies.rs +++ b/packages/signals/examples/dependancies.rs @@ -7,7 +7,7 @@ fn main() { fn app() -> Element { let mut signal = use_signal(|| 0); - use_future(|| async move { + use_future(move || async move { loop { tokio::time::sleep(std::time::Duration::from_secs(1)).await; signal += 1;