use*_*437 13 blazor blazor-webassembly
我正在尝试了解 Blazor 的行为方式。我正在调试一些东西,但暂时删除注释其他代码,以免被破坏并确保我所观察到的内容。代码如下所示。
<OneComponent @ref="_oneComponent" param1="@varParam1" param2="@varParam2"></OneComponent>
Run Code Online (Sandbox Code Playgroud)
@code {
private OneComponent _oneComponent;
private _objectOne varParam1; // There are values here.
private _objectTwo varParam2; // There are values here as well.
private async Task SaveClicked()
{
if (_oneComponent.OnSaveClicked())
{
// nothing here.
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行该程序时,我注意到OnParametersSetAsync()正在 <OneComponent/>重新运行。我的问题是,即使我没有更改 varParam1、varParam2 中的任何一个,为什么会OnParametersSetAsync()再次重新运行?是这样吗?当程序现在指向_oneComponent返回 true 或 false 后的该组件时,是否应该重新运行?
rk7*_*k72 18
是否OnParametersSet()被OnParametersSetAsync()调用取决于组件参数的类型。
对于原始类型以及一些已知不可变的其他类型,Blazor 可以轻松检测参数值是否更改,并决定调用或不调用该OnParametersSet()方法。
因此,如果您的参数是bool、int、string和类型,decimal则DateTime检测开箱即用,并且OnParametersSet()不会被调用,除非参数的值已更改。
对于enum参数或更复杂的参数,OnParametersSet()每次父组件(或页面)重新渲染时都会调用。
这也记录在 Blazor 官方文档中:https://learn.microsoft.com/en-us/aspnet/core/blazor/components/lifecycle ?view=aspnetcore-3.1#after-parameters-are-set
在代码中,您可以编写简单的检查来查看组件参数的实际值是否更改,并且仅在检测到更改的情况下调用处理。
我发现我可以使用 ShouldRender() 生命周期来限制它重新运行。
protected override bool ShouldRender()
{
return false;
}
Run Code Online (Sandbox Code Playgroud)
当它OnParametersSetAsync()调用 时,将再次重新运行两次OnSaveClicked()。
| 归档时间: |
|
| 查看次数: |
18383 次 |
| 最近记录: |