在组件中使用EventCallback时,控件的参数会再次发送/未正确更新。
组件
<button @onclick="@(e => ChangePlaceholder())">Change Placeholder</button>
<button @onclick="@(e => ChangePlaceholderEvent())">Change Placeholder Event</button>
<label>@Placeholder</label>
@code {
[Parameter]
public string Placeholder { get; set; }
[Parameter]
public EventCallback<string> OnChanged { get; set; }
private void ChangePlaceholder()
{
Placeholder = "hello";
}
private void ChangePlaceholderEvent()
{
Placeholder = "hello";
OnSelectedChanged.InvokeAsync(Placeholder);
}
}
父页面
<Control Placeholder="something" OnChanged=@UpdateSomething />
@code {
static void UpdateSomething(string someString)
{
Console.WriteLine($"Event went kablam: {someString}");
}
}
如果要运行ChangePlaceholder((函数,则UI会更新并更改例如'hello',但如果运行ChangePlaceholderEvent((数,标签会返回到 'something'这让我相信,触发EventCallback也会使控件的其他参数再次发送。 如何阻止参数再次发送? 编辑:我制作了一个webassemby应用程序,并测试了相同的代码,结果出现了相同的错误。
事件回调将触发父组件的重新呈现,并且你在无条件地传递"某物"导致"某物"被重新呈现。
这里的问题是,您正在使用一个参数作为组件,您应该避免。
参考
您可以使用"Action"而不是"EventCallback"来解决问题:
[Parameter]
public Action<string> OnChanged { get; set; }
@code {
private void ChangePlaceholderEvent()
{
Placeholder = "hello";
OnChanged(Placeholder);
}
}