macro_rules! tracked {
($e:expr) => { ... };
}Expand description
Unwraps and propogates a Tracked value.
By default, tracked takes ownership of its input. Passing a reference instead
will return a reference to the input’s inner value.
Within a #[component] body, wraps the expression containing it in a Tracked instance maintaining
whether any of the tracked!() values were updated. Closure values are wrapped in Tracked if they contain tracked
or updated calls with external identifiers as inputs.
Outside of #[component], provides access to the tracked value
without rewrapping the containing expression.
§Example
#[component]
fn ComponentBody() -> View {
let a = Tracked::new(8, true);
let b: Tracked<u32> = tracked!(a);
// c has type Tracked<u32>
let c = tracked!(a) + tracked!(b);
assert_eq!(tracked!(c), 16);
assert!(updated!(c));
// Tracked closure behavior
let d = Tracked::new(2, false);
let closure = || {
let a = Tracked::new(2, true);
tracked!(a) + tracked!(d)
};
// closure depends on external identifier d,
// so it is wrapped in Tracked, but since d is not updated,
// neither is closure.
assert!(!updated!(closure));
// ..
}