我如何知道何时需要在 Blazor 中调用 StateHasChanged()?
How do I know when I need to call StateHasChanged() in Blazor?
我怎么知道什么时候必须在 Blazor 中调用 StateHasChanged()?
在典型情况下,假设我正在加载数据并且我希望 "Load" 按钮在加载时被禁用。所以也许我有以下内容。我看到的行为是按钮将在初始加载期间显示为已启用,除非我在第 17 行调用 base.StateHasChanged()
;但是,在那之后,如果我单击 "load",该按钮将在加载时显示为禁用状态,然后按预期变为启用状态。那么为什么在 OnInitializedAsync 的调用中这样不起作用?是否有其他方法可以让我省略 StateHasChanged()?
@inject HttpClient Http
<div class="my-component">
<button disabled="@(LoadingTask?.IsCompleted == false)" @onclick="LoadData">Load</button>
...
</div>
@code {
protected override async Task OnInitializedAsync() => await LoadData();
private Task<Thing[]>? LoadingTask { get; set; }
private Thing[] Data { get; set; } = new Thing[0];
private async Task LoadData()
{
LoadingTask = Http.GetJsonAsync<Thing[]>(url);
// Line 17: I shouldn't need to call base.StateHasChanged() here, right?
funds = await LoadingTask;
HasLoaded = true;
}
}
当您想更新子内容的状态时,您应该在其父组件中调用 StateHasChanged()。
似乎 OnInitializedAsync 不允许组件在等待时重新呈现,这与用户启动的事件(如 OnClick)不同。因此,似乎有必要在 OnInitializedAsync 中调用 StateHasChanged ,除非 Blazor 在何时检查未来版本中的更改方面变得更加复杂。
我怎么知道什么时候必须在 Blazor 中调用 StateHasChanged()?
在典型情况下,假设我正在加载数据并且我希望 "Load" 按钮在加载时被禁用。所以也许我有以下内容。我看到的行为是按钮将在初始加载期间显示为已启用,除非我在第 17 行调用 base.StateHasChanged()
;但是,在那之后,如果我单击 "load",该按钮将在加载时显示为禁用状态,然后按预期变为启用状态。那么为什么在 OnInitializedAsync 的调用中这样不起作用?是否有其他方法可以让我省略 StateHasChanged()?
@inject HttpClient Http
<div class="my-component">
<button disabled="@(LoadingTask?.IsCompleted == false)" @onclick="LoadData">Load</button>
...
</div>
@code {
protected override async Task OnInitializedAsync() => await LoadData();
private Task<Thing[]>? LoadingTask { get; set; }
private Thing[] Data { get; set; } = new Thing[0];
private async Task LoadData()
{
LoadingTask = Http.GetJsonAsync<Thing[]>(url);
// Line 17: I shouldn't need to call base.StateHasChanged() here, right?
funds = await LoadingTask;
HasLoaded = true;
}
}
当您想更新子内容的状态时,您应该在其父组件中调用 StateHasChanged()。
似乎 OnInitializedAsync 不允许组件在等待时重新呈现,这与用户启动的事件(如 OnClick)不同。因此,似乎有必要在 OnInitializedAsync 中调用 StateHasChanged ,除非 Blazor 在何时检查未来版本中的更改方面变得更加复杂。