OnParametersSetAsync()
中。此组件还有一个复杂类型参数。
当此组件由重新渲染自身的父组件使用时,即使没有更改其任何参数,也会调用此子组件的
OnParametersSetAsync()
。我的理解是,这是因为复杂类型参数(Blazor无法确定是否已更改,因此假定已更改)。这将导致API调用不必要地重新触发(实际int参数未更改)。
在
OnParametersSetAsync()
中这样做是否合适?如果不是,我应该如何更改我的组件以与Blazor框架一起工作?
父组件
调用ChangeName()触发父组件的重新渲染
<div>
<EditForm Model="favoriteNumber">
<InputSelect @bind-Value="favoriteNumber">
<option value="0">zero</option>
<option value="1">one</option>
<option value="2">two</option>
<option value="3">three</option>
</InputSelect>
</EditForm>
@* This is the child-component in question *@
<TestComponent FavoriteNumber="favoriteNumber" FavoriteBook="favoriteBook" />
<br />
<EditForm Model="person">
First Name:
<InputText @bind-Value="person.FirstName" />
<br />
Last Name:
<InputText @bind-Value="person.LastName" />
</EditForm>
<button @onclick="ChangeName">Change Name</button>
</div>
@code {
private int favoriteNumber = 0;
private Book favoriteBook = new();
private Person person = new() { FirstName = "Joe", LastName = "Smith" };
private void ChangeName()
{
person.FirstName = person.FirstName == "Susan" ? "Joe" : "Susan";
person.LastName = person.LastName == "Smith" ? "Williams" : "Smith";
}
}
子组件
<div>@infoAboutFavoriteNumber</div>
@code {
[Parameter]
public int FavoriteNumber { get; set; }
[Parameter]
public Book FavoriteBook { get; set; }
private string infoAboutFavoriteNumber = "";
protected override async Task OnParametersSetAsync()
{
infoAboutFavoriteNumber = await ApiService.GetAsync<string>(id: FavoriteNumber.ToString());
}
}