在触发/调用EventCallback之后,将再次发送参数



在组件中使用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);
}
}

相关内容

  • 没有找到相关文章

最新更新