Skip to content

Commit 1cdfe60

Browse files
authored
starting net9 EventCallbacks are included in change detection
1 parent 88539e2 commit 1cdfe60

File tree

1 file changed

+15
-0
lines changed

1 file changed

+15
-0
lines changed

aspnetcore/blazor/performance.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,27 @@ At runtime, components exist in a hierarchy. A root component (the first compone
3333

3434
The last two steps of the preceding sequence continue recursively down the component hierarchy. In many cases, the entire subtree is rerendered. Events targeting high-level components can cause expensive rerendering because every component below the high-level component must rerender.
3535

36+
:::moniker range=">= aspnetcore-9.0"
37+
38+
To prevent rendering recursion into a particular subtree, use either of the following approaches:
39+
40+
* Ensure that the **set** parameters of child components are of primitive immutable types, such as `string`, `int`, `bool`, `DateTime`, and other similar types. The built-in logic for detecting changes automatically skips rerendering if the primitive immutable parameter values haven't changed. Only the parameters that are explicitly set on the component are considered for change detection. If you render a child component with `<Customer CustomerId="item.CustomerId" />`, where `CustomerId` is an `int` type, then the `Customer` component isn't rerendered unless `item.CustomerId` changes.
41+
* Override <xref:Microsoft.AspNetCore.Components.ComponentBase.ShouldRender%2A>:
42+
* To accept nonprimitive parameter values, such as complex custom model types, or <xref:Microsoft.AspNetCore.Components.RenderFragment> values.
43+
* If authoring a UI-only component that doesn't change after the initial render, regardless of parameter value changes.
44+
45+
:::moniker-end
46+
47+
:::moniker range="< aspnetcore-9.0"
48+
3649
To prevent rendering recursion into a particular subtree, use either of the following approaches:
3750

3851
* Ensure that the **set** parameters of child components are of primitive immutable types, such as `string`, `int`, `bool`, `DateTime`, and other similar types. The built-in logic for detecting changes automatically skips rerendering if the primitive immutable parameter values haven't changed. Only the parameters that are explicitly set on the component are considered for change detection. If you render a child component with `<Customer CustomerId="item.CustomerId" />`, where `CustomerId` is an `int` type, then the `Customer` component isn't rerendered unless `item.CustomerId` changes.
3952
* Override <xref:Microsoft.AspNetCore.Components.ComponentBase.ShouldRender%2A>:
4053
* To accept nonprimitive parameter values, such as complex custom model types, event callbacks, or <xref:Microsoft.AspNetCore.Components.RenderFragment> values.
4154
* If authoring a UI-only component that doesn't change after the initial render, regardless of parameter value changes.
55+
56+
:::moniker-end
4257

4358
The following airline flight search tool example uses private fields to track the necessary information to detect changes. The previous inbound flight identifier (`prevInboundFlightId`) and previous outbound flight identifier (`prevOutboundFlightId`) track information for the next potential component update. If either of the flight identifiers change when the component's parameters are set in [`OnParametersSet`](xref:blazor/components/lifecycle#after-parameters-are-set-onparameterssetasync), the component is rerendered because `shouldRender` is set to `true`. If `shouldRender` evaluates to `false` after checking the flight identifiers, an expensive rerender is avoided:
4459

0 commit comments

Comments
 (0)