Blazor 在OnInitializedAsync()之后更改变量值
我有一个调用多个API的组件。我想只在所有调用完成时显示页面,因此我添加了一个bool,并用false初始化它,当Blazor 在OnInitializedAsync()之后更改变量值,blazor,blazor-webassembly,Blazor,Blazor Webassembly,我有一个调用多个API的组件。我想只在所有调用完成时显示页面,因此我添加了一个bool,并用false初始化它,当OnInitializedAsync()完成时,该值将变为true,但该值不变,页面将继续显示加载程序。我做错了什么 组成部分: @if (ComponenetReady) { // Show Stuff } Else { // Show loader } @Code { public bool ComponenetReady { get; set; } = false
OnInitializedAsync()
完成时,该值将变为true,但该值不变,页面将继续显示加载程序。我做错了什么
组成部分:
@if (ComponenetReady) {
// Show Stuff
} Else {
// Show loader
}
@Code
{
public bool ComponenetReady { get; set; } = false;
protected override async Task OnInitializedAsync() {
// Await APIs calls
ComponenetReady = true;
}
}
因为它是一个异步任务,所以它将在不同的线程上运行。尝试
等待InvokeAsync(StateHasChanged)代码>就在您的ComponenetReady=true之后代码>设置标志后,尝试调用StateHasChanged()。您可能还需要将标记从OnInitializedAsync移动到OnAfterRenderAsync()。这应该已经起作用了。所以还有一个问题。用Task.Delay()替换API调用,并创建一个在我看来很好的API调用。上面的代码没有问题。组件在OnInitializedAsync
完成后重新呈现,因此ComponenetReady
将为真。问题在于您没有向我们展示的代码。在ComponenetReady=true上设置断点代码>并查看它何时被命中。WebAssembly上的Blazor没有“不同的线程”。