diff --git a/packages/core/src/global_context.rs b/packages/core/src/global_context.rs
index 1930f155e..94f60ac38 100644
--- a/packages/core/src/global_context.rs
+++ b/packages/core/src/global_context.rs
@@ -222,6 +222,46 @@ pub fn remove_future(id: Task) {
/// In order to clean up resources you would need to implement the [`Drop`] trait for an inner value stored in a RC or similar (Signals for instance),
/// as these only drop their inner value once all references have been dropped, which only happens when the component is dropped.
///
+///
+///
+/// `use_hook` is not reactive. It just returns the value on every render. If you need state that will track changes, use [`use_signal`](dioxus::prelude::use_signal) instead.
+///
+/// ❌ Don't use `use_hook` with `Rc>` for state. It will not update the UI and other hooks when the state changes.
+/// ```rust
+/// use dioxus::prelude::*;
+/// use std::rc::Rc;
+/// use std::cell::RefCell;
+///
+/// pub fn Comp() -> Element {
+/// let count = use_hook(|| Rc::new(RefCell::new(0)));
+///
+/// rsx! {
+/// button {
+/// onclick: move |_| *count.borrow_mut() += 1,
+/// "{count.borrow()}"
+/// }
+/// }
+/// }
+/// ```
+///
+/// ✅ Use `use_signal` instead.
+/// ```rust
+/// use dioxus::prelude::*;
+///
+/// pub fn Comp() -> Element {
+/// let mut count = use_signal(|| 0);
+///
+/// rsx! {
+/// button {
+/// onclick: move |_| count += 1,
+/// "{count}"
+/// }
+/// }
+/// }
+/// ```
+///
+///
+///
/// # Example
///
/// ```rust, no_run
diff --git a/packages/core/src/scope_context.rs b/packages/core/src/scope_context.rs
index 9f77273bf..0750267b6 100644
--- a/packages/core/src/scope_context.rs
+++ b/packages/core/src/scope_context.rs
@@ -367,6 +367,46 @@ impl Scope {
/// In order to clean up resources you would need to implement the [`Drop`] trait for an inner value stored in a RC or similar (Signals for instance),
/// as these only drop their inner value once all references have been dropped, which only happens when the component is dropped.
///
+ ///
+ ///
+ /// `use_hook` is not reactive. It just returns the value on every render. If you need state that will track changes, use [`use_signal`](dioxus::prelude::use_signal) instead.
+ ///
+ /// ❌ Don't use `use_hook` with `Rc>` for state. It will not update the UI and other hooks when the state changes.
+ /// ```rust
+ /// use dioxus::prelude::*;
+ /// use std::rc::Rc;
+ /// use std::cell::RefCell;
+ ///
+ /// pub fn Comp() -> Element {
+ /// let count = use_hook(|| Rc::new(RefCell::new(0)));
+ ///
+ /// rsx! {
+ /// button {
+ /// onclick: move |_| *count.borrow_mut() += 1,
+ /// "{count.borrow()}"
+ /// }
+ /// }
+ /// }
+ /// ```
+ ///
+ /// ✅ Use `use_signal` instead.
+ /// ```rust
+ /// use dioxus::prelude::*;
+ ///
+ /// pub fn Comp() -> Element {
+ /// let mut count = use_signal(|| 0);
+ ///
+ /// rsx! {
+ /// button {
+ /// onclick: move |_| count += 1,
+ /// "{count}"
+ /// }
+ /// }
+ /// }
+ /// ```
+ ///
+ ///
+ ///
/// # Example
///
/// ```rust