diff --git a/docs/guide/src/en/getting_started/hot_reload.md b/docs/guide/src/en/getting_started/hot_reload.md index 8c4d4310d..bd0cb65ac 100644 --- a/docs/guide/src/en/getting_started/hot_reload.md +++ b/docs/guide/src/en/getting_started/hot_reload.md @@ -2,7 +2,7 @@ 1. Hot reloading allows much faster iteration times inside of rsx calls by interpreting them and streaming the edits. 2. It is useful when changing the styling/layout of a program, but will not help with changing the logic of a program. -3. Currently the cli only implements hot reloading for the web renderer. For TUI, desktop, and liveview you can use the hot reload macro. +3. Currently the cli only implements hot reloading for the web renderer. For TUI, desktop, and LiveView you can use the hot reload macro instead. # Web @@ -25,7 +25,7 @@ dioxus serve --hot-reload # Desktop/Liveview/TUI -For desktop, LiveView, and tui, you can place the hot reload macro before your app runs to enable hot reloading. +For desktop, LiveView, and tui, you can place the hot reload macro at the top of your main function to enable hot reloading. ## Setup @@ -33,7 +33,7 @@ Add the following to your main function: ```rust fn main() { - dioxus::hot_reload_init!(); + hot_reload_init!(); // launch your application } ``` @@ -46,10 +46,6 @@ cargo run 2. Change some code within a rsx or render macro 3. Save and watch the style change without recompiling -## Custom renders - -For custom renderers - # Limitations 1. The interpreter can only use expressions that existed on the last full recompile. If you introduce a new variable or expression to the rsx call, it will trigger a full recompile to capture the expression. -2. Components and Iterators can contain arbitrary rust code and will trigger a full recompile when changed. \ No newline at end of file +2. Components and Iterators can contain arbitrary rust code and will trigger a full recompile when changed. diff --git a/packages/hot-reload/src/lib.rs b/packages/hot-reload/src/lib.rs index 6ac5c2c35..36ba0eaf9 100644 --- a/packages/hot-reload/src/lib.rs +++ b/packages/hot-reload/src/lib.rs @@ -12,7 +12,7 @@ use interprocess::local_socket::{LocalSocketListener, LocalSocketStream}; use notify::{RecommendedWatcher, RecursiveMode, Watcher}; /// Initialize the hot reloading listener on the given path -pub fn init(root_path: &'static str, listening_paths: &'static [&'static str]) { +pub fn init(root_path: &'static str, listening_paths: &'static [&'static str], log: bool) { if let Ok(crate_dir) = PathBuf::from_str(root_path) { let temp_file = std::env::temp_dir().join("@dioxusin"); let channels = Arc::new(Mutex::new(Vec::new())); @@ -41,7 +41,9 @@ pub fn init(root_path: &'static str, listening_paths: &'static [&'static str]) { } } channels.lock().unwrap().push(connection); - println!("Connected to hot reloading 🚀"); + if log { + println!("Connected to hot reloading 🚀"); + } } } } @@ -94,7 +96,11 @@ pub fn init(root_path: &'static str, listening_paths: &'static [&'static str]) { } } UpdateResult::NeedsRebuild => { - println!("Rebuild needed... shutting down hot reloading"); + if log { + println!( + "Rebuild needed... shutting down hot reloading" + ); + } return; } } @@ -152,14 +158,26 @@ pub fn connect(mut f: impl FnMut(Template<'static>) + Send + 'static) { /// Pass any number of paths to listen for changes on relative to the crate root as strings. /// If no paths are passed, it will listen on the src and examples folders. #[macro_export] -macro_rules! hot_reload_init_inner { - () => { - dioxus_hot_reload::init(core::env!("CARGO_MANIFEST_DIR"), &["src", "examples"]) +macro_rules! hot_reload_init { + ($($t: ident)*) => { + #[cfg(debug_assertions)] + dioxus_hot_reload::init(core::env!("CARGO_MANIFEST_DIR"), &["src", "examples"], hot_reload_init!(log: $($t)*)) }; - ($($paths: literal),*) => { - dioxus_hot_reload::init(core::env!("CARGO_MANIFEST_DIR"), &[$($paths),*]) + ($($paths: literal),* $(,)? $($t: ident)*) => { + #[cfg(debug_assertions)] + dioxus_hot_reload::init(core::env!("CARGO_MANIFEST_DIR"), &[$($paths),*], hot_reload_init!(log: $($t)*)) + }; + + (log:) => { + false + }; + + (log: enable logging) => { + true + }; + + (log: disable logging) => { + false }; } - -pub use hot_reload_init_inner as hot_reload_init;