Property Memoize
- Namespace
- Velvet
- Assembly
- Velvet.Docs.dll
Memoize
Opt-in props-bail: skip a parent-driven re-render when this component's props are
shallow-equal to the previous render — the props bag compared member by member, each member
decided by the per-type rule Dependencies states. A props value that is
not a props bag — a value type, a string, a collection — is compared whole under that same rule
instead of through a member set, so two distinct collections of equal content are a change.
Any other value type is decided by its own Equals, which reads what it holds, and then — on this
path alone — the float and double fields it carries, directly or inside a value
type it holds, are compared by raw bit pattern on top of that, so +0 and -0 in one
of those are a change as two float members are. That last reading is not part of the
cited rule and the dependency comparison does not take it, so the same pair reaching a hook as a
dependency is unchanged. ComponentPropsComparerTests is what fails if either half of the
props answer stops holding, and ObjectIsTests if the dependency answer starts taking it.
Default is false.
This is a true opt-in gate: only a component with Memoize = true (or one created via
V.Memo with a custom comparator) bails on shallow-equal props. A component without it
re-renders whenever its parent re-renders; only an opted-in component
skips a re-render on equal props.
Unrelated to MemoizeMethodAttribute: that attribute drives per-method wrapping by the Source
Generator, while this property is the per-component props-bail flag at the reconcile boundary. The
shared Memoize root is all the two have in common.
public bool Memoize { get; init; }
Property Value
- bool