Rule 4 of 8 · Chapter II — State & Rendering
StateHasChanged is a smell until proven otherwise.
Why this rule exists
Blazor already re-renders after event handlers, parameter changes, and awaited continuations. A hand-placed StateHasChanged usually means the state flow is wrong — and it papers over the real bug.
In practice
Before adding one, ask what state changed and who owns it. Legitimate uses are rare and loud: timer callbacks, events raised from non-UI threads via InvokeAsync.