Blazor 组件中 OnClick 和 @onclick 有什么区别?

6
我发现了一些有趣的事情,想知道是否有人知道答案:
首先,这不是这个问题: Blazor中不同方法调用 那个问题是关于HTML元素的。我在谈论组件。
所以我有自己的一个名为MyButton的组件;它有指定的OnClick参数:
MyButton.razor
<button @onclick="OnClick">Do Something</button>

@code {
    [Parameter]
    public EventCallback<MouseEventArgs> OnClick { get; set; }
}

当我使用MyButton时,可以使用完全一样的名称,即 <MyButton OnClick="SomeMethod" /> 但是这个也能起作用: <MyButton @onclick="SomeMethod" /> 如果我从MyButton.razor中删除整个@code块,则它们都会给我完全相同的错误消息: <Mybutton OnClick="MyMethod" /> 对象类型'MyButton'没有与名称'OnClick'匹配的属性。 <Mybutton @onclick="MyMethod" /> 对象类型'MyButton'没有与名称'onclick'匹配的属性。
唯一的区别在于大写字母。 "OnClick"与"onclick"不同… 那很合乎逻辑。那么@onclick是否等同于OnClick呢?
这只是某种重载吗?

1
我相信这个问题已经在这里得到了回答。 - Brian Mitchell
2个回答

3

@onclick 是原生HTML的点击事件,而OnClick是你在MyButton组件中显式公开的事件参数。

因此,在这种情况下,你应该使用

<MyButton OnClick="SomeMethod" />

我尝试使用@onclick重现了这个用法,但在我的案例中它无效。

为了调查,你可以尝试在MyButton组件中添加文本<p> Like this </p>并查看@onclick事件是否仍然起作用,以及它是否仅在单击按钮时触发,还是在单击文本时也会触发。

此外,请参见Microsoft Docs以获取详细信息。


0
你使用 MudBlazor 吗?因为我认为 OnClick 是 MudBlazor 按钮 API 的一部分,而 @onclick 则是 ASP.NET Core Blazor 事件处理功能的一部分。

1
这并没有回答问题。一旦您拥有足够的声望,您将能够评论任何帖子;相反,提供不需要询问者澄清的答案。- 来自审核 - Waldi
不,我不使用那个。如果我没记错的话,它是在原生的 Blazor 中。 - Marijn Pessers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接