1use crate::use_callback;
2use dioxus_core::prelude::*;
3use dioxus_signals::Memo;
4
5#[doc = include_str!("../docs/derived_state.md")]
6#[doc = include_str!("../docs/rules_of_hooks.md")]
7#[doc = include_str!("../docs/moving_state_around.md")]
8#[track_caller]
9pub fn use_memo<R: PartialEq>(mut f: impl FnMut() -> R + 'static) -> Memo<R> {
10 let callback = use_callback(move |_| f());
11 let caller = std::panic::Location::caller();
12 #[allow(clippy::redundant_closure)]
13 use_hook(|| Memo::new_with_location(move || callback(()), caller))
14}