Blazor StateHasChanged无法按预期工作

时间:2020-01-05 09:52:40

标签: blazor

在用户单击按钮后,我使用布尔属性禁用按钮,以使单击不会发生两次。

chrome://policy

按钮的设计如下:

runtime_blocked_hosts

但是这不起作用,并且仅在PlaceOrder方法完成执行后,按钮才被禁用。 我对ajax指示器存在相同的问题,即在执行方法后应显示并在完成后应隐藏,使用if块。 在这两种情况下,状态已更改均无效。我使用Blazor Server侧预览9。如何使它们工作?

1 个答案:

答案 0 :(得分:1)

请阅读火星上agua的评论,并按照以下代码示例查看其工作原理...单击按钮时,调用DisablePlaceOrder方法,标题文本将更改以反映正在进行的操作动作,在此期间按钮被禁用。这发生在3秒的时间范围内,包括重新呈现控件以反映视觉变化。请注意,不会调用StateHasChanged。

当然,在现实生活中的应用程序中,您不会使用Task.Delay方法,而是调用需要大量工作的方法...

<button type="button" @onclick="@PlaceOrder_Clicked" disabled="@DisablePlaceOrderButton">@Title</button>

@code{
    private bool DisablePlaceOrderButton { get; set; } = false;

    public string Title { get; set; } = "Place Order";

    private async Task PlaceOrder_Clicked()
    {

        await DisablePlaceOrder();

        //if (cart.Lines.Count() == 0)
        //{
        DisablePlaceOrderButton = false;
        Title = "Place Order";
        // return;
        //}

    }

    async Task DisablePlaceOrder()
    {
        DisablePlaceOrderButton = true;
        Title = "Wait...";
        await Task.Delay(3000); 

    }
}