Table of Contents

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