diff --git a/thaw/src/input/mod.rs b/thaw/src/input/mod.rs
index 5ab5a4f..0403f39 100644
--- a/thaw/src/input/mod.rs
+++ b/thaw/src/input/mod.rs
@@ -140,6 +140,16 @@ pub fn Input(
         }
     };
 
+    let input_value: Option<String>;
+    #[cfg(feature = "ssr")]
+    {
+        input_value = Some(value.get_untracked());
+    }
+    #[cfg(not(feature = "ssr"))]
+    {
+        input_value = None;
+    }
+
     #[cfg(debug_assertions)]
     {
         const INNER_ATTRS: [&str; 4] = ["type", "class", "disabled", "placeholder"];
@@ -173,6 +183,7 @@ pub fn Input(
             <input
                 {..attrs}
                 type=move || variant.get().as_str()
+                value=input_value
                 prop:value=move || {
                     value_trigger.track();
                     value.get()
diff --git a/thaw/src/input_number/mod.rs b/thaw/src/input_number/mod.rs
index 9cf81c5..8999530 100644
--- a/thaw/src/input_number/mod.rs
+++ b/thaw/src/input_number/mod.rs
@@ -23,7 +23,7 @@ where
     T: Default + Clone + FromStr + ToString + 'static,
 {
     let input_value = create_rw_signal(String::default());
-    create_effect(move |prev| {
+    Effect::new_isomorphic(move |prev| {
         value.with(|value| {
             let value = value.to_string();
             if let Some(prev) = prev {