参数更改的调用方法

时间:2019-11-19 10:57:14

标签: blazor

我有一个组件,可以使用参数从WebAPI获取要显示的数据。参数来自父组件,当参数值更改时,我需要刷新数据。

@if (somedata != null)
{
    <span>@somedata.FirstOrDefault()?.SomeValue</span>
}
@code {
    [Parameter]
    public int SelectedLine
    {
        get => selectedLine;
        set
        {
            if (selectedLine != value)
            {
                selectedLine = value;
                UpdateAsync();
            }
        }
    }
    private int selectedLine;
    private List<SomeData> somedata;

    protected override async Task OnInitializedAsync()
    {
        await UpdateAsync();
    }
    private async Task UpdateAsync()
    {
        somedata = await SomeRepo.GetAsync(SelectedLine);
    }
}

代码运行良好,但是我得到了警告(“因为未等待此调用,因此在调用完成之前将继续执行当前方法”),我认为这不是一个很好的决定。怎么做对呢?

2 个答案:

答案 0 :(得分:4)

您可以使用OnParametersSetAsync()正确等待获取数据。

然后该属性不再需要使用setter。

[Parameter]
public int SelectedLine { get; set; }

protected override async Task OnParametersSetAsync()
{
    await UpdateAsync();        
}

答案 1 :(得分:0)

收到此警告的原因是因为您从集合访问器中调用UpdateAsync而不等待它,但是随后您无法在SelectedLine属性中等待UpdateAsync。

要解决此问题,您可以实现INotifyPropertyChanged接口,以通知订阅客户端该属性的值已更改。这是让客户知道属性值已更改的适当方法,当然,这不是Blazor的事情。

请参见我的答案here ,其中实现了INotifyPropertyChanged接口