起初,获取子组件数据的逻辑是在OnInitializedAsync方法中,但我意识到如果下拉列表更改,子组件不会更新。基本上,根据选择的类别,我从数据库中查询不同的数据。
这里的代码:
<EditForm Model="Model" OnValidSubmit="Save">
<div class="form-group">
<label for="Category">Category</label>
<select id="Category" class="custom-select" @onchange="OnCategoryChanged">
<option value=""></option>
@foreach (var category in Model.Categories)
{
if (Model.Category != null && Model.Category.Value == category.Id)
{
<option value="@category.Id" selected="selected">@category.Name</option>
}
else
{
<option value="@category.Id">@category.Name</option>
}
}
</select>
<ValidationMessage For="@(() => Model.Category)" />
</div>
@if (Model.Category != null && Model.Category.IsExternalOrNonRuning == false)
{
<ChildComponent @bind-Data="Model.Data" Id="Id" Category="Model.Category" />
}
</EditForm>
该组件的代码
protected override async Task OnInitializedAsync()
{
Model = _Query(Id);
}
private void OnCategoryChanged(ChangeEventArgs e)
{
Model.Category = e.Value.ToString();
}
我决定将我的代码从OnInitializedAsync移动到OnParametersSetAsync,这样每次下拉列表更改时,子组件都会更新。但是,这会创建一个无限循环。即使参数尚未更新,该方法也会持续调用。
有想法该怎么解决这个吗?