OnInitializedAsync 与 OnParametersSetAsync

Ven*_*kat 7 blazor

我明白他们之间的区别。

OnInitializedAsync 在组件初始化时触发一次,而 OnParametersSetAsync 在每次设置/更改组件参数时触发。

这是否意味着在 .razor 页面中我们可以省略 OnInitializedAsync 函数并在此 OnParametersSetAsync() 函数中进行所有编码?

这是否意味着 OnInitializedAsync() 是多余的?

Dim*_*kos 11

假设您有一个组件调用 API 来检索一些数据。它还接受一个名为 的参数SortDirection,您希望根据其值对数据进行升序或降序排序。API 调用应该只发生一次,一旦内存中有数据,就不再需要调用后端。另一方面,假设用户有一个切换按钮可以更改排序方向,以便SortDirection参数可以在组件生命周期内多次更改。您想要检索内部数据OnInitializedAsync(),但应该在内部应用排序OnParametersSetAsync()。例子:

@if (_sortedData != null)
{
    foreach (var item in _sortedData)
    {
        <p>@item</p>
    }
}

@code {
    private List<string>? _data;
    private List<string>? _sortedData;
    private string? _sortDirection;

    [Parameter]
    public string? SortDirection { get; set; }

    protected override async Task OnInitializedAsync()
    {
        _data = await MyService.LoadData();        
    }

    protected override void OnParametersSet()
    {
        if (_sortDirection != SortDirection)
        {
            _sortDirection = SortDirection;

            if (_sortDirection == "asc")
            {
                _sortedData = _data?.OrderBy(x => x).ToList();
            }
            else if (_sortDirection == "desc")
            {
                _sortedData = _data?.OrderByDescending(x => x).ToList();
            }
            else
            {
                _sortedData = _data;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)