输入元素不会重新渲染,用例是当用户输入一些文本时,当前日期将通过“ value
”属性填充到输入元素中。请参阅下面的代码。
@page "/"
<label>Text Binding check:</label>
<input type="text" value="@TextData" @onchange="OnChange_Text" />
<br />
<br />
<label>Text Dummy:</label>
<input type="text" value="dummy" />
@code
{
public string? TextData { get; set; } = "12-12-2022";
protected override bool ShouldRender()
{
return true;
}
private void OnChange_Text(ChangeEventArgs e)
{
TextData = GetValue(e.Value?.ToString());
InvokeAsync(() => StateHasChanged());
}
private string GetValue(string? strValue)
{
return strValue switch
{
"test" => DateTime.Now.ToString("dd-MM-yyyy"),
"data" => DateTime.Now.ToString("dd-MM-yyyy"),
"nash" => DateTime.Now.ToString("dd-MM-yyyy"),
_ => DateTime.Now.ToString("dd-MM-yyyy")
};
}
}
如果用户再次输入相同的文本或任何文本,则日期不会第二次呈现在输入元素中。即使将 和StateHasChanged()
设置ShouldRender
为 true,也不会呈现该值。
因此,根据 Blazor 机制,元素实际上并未改变,因此渲染树不会将输入元素渲染到 DOM。我该如何解决这个问题,如何重新渲染未改变的元素?我想SateHasChanged()
刷新ShouldRender
UI,它不关心元素差异。