【发布时间】:2021-11-07 03:53:32
【问题描述】:
我想弄清楚何时需要调用 StateHasChanged()。我知道通过 Javascript 更改值时,可能需要强制 blazor 组件呈现页面。在下面的代码中,我有一个名为 HandleClick 的方法来处理按钮单击,我故意注释掉 StateHasChanged() 。 HandleClick 方法本身调用Javascript 来设置Part 2 中元素的值。由于 Blazor 组件不知道 fromJs 值的变化,所以 Part 1 中的值在点击后不会更新。但问题是为什么当我再次单击按钮时 Part 1 中的值会发生变化。
@page "/ExampleY"
@using Microsoft.AspNetCore.Components
@using Microsoft.JSInterop
@inject IJSRuntime JSRuntime
<div class="p-2">
<p class="alert-info p-3">
Part 1. Get value via JS call: <strong>@(fromJs ?? "Empty")</strong>
</p>
<p class="alert-success p-3">
Part 2. Set value via JS call: <strong @ref="element"></strong>
</p>
<button class="btn btn-success" @onclick="HandleClick">Click to Call JS</button>
</div>
@code {
private string fromJs;
private ElementReference element;
public async void HandleClick()
{
fromJs = await JSRuntime.InvokeAsync<string>("setText", element, "Hello from JS call!");
// StateHasChanged();
}
}
【问题讨论】: