在下面的示例代码中,我只在第一次初始化页面时将Counter
组件添加到counters
中一次,并使用"get计数“按钮的onclick
事件,得到了counters
的Count
;
@page "/"
<button @onclick="@(() => count = counters.Count)">get count</button>
<p>Count: @count</p>
@for (int i = 0; i < 1; i++)
{
counters.Add(new Counter());
}
@code {
private int count;
private List<Counter> counters;
protected override void OnInitialized()
{
counters = new List<Counter>();
}
}
但是为什么每次我按“获取计数”按钮时,count
变量就会增加一个?(就好像@for
块也会被执行一样)
Blazor 3.2.0
发布于 2020-06-20 09:04:43
当然,@for块也会被执行。否则,当一个新的计数器对象添加到列表中时,如何才能使count变量增加1。
您应该认识到Blazor的一个基本方面: UI事件,例如单击事件,会导致组件的重新呈现;因此组件的所有视图部分都是重新呈现的。也许您认为只执行lambda表达式?事实上,所有的视图都是重新渲染的。同样,这是Blazor的基本原则,您应该很好地理解它,并在设计组件时考虑到它。
无论如何,您都不应该像这样实例化组件。组件是考虑特殊情况的类,因为它们只应实例化为元素,例如<Counter/>
。造成这种不规范的原因是,组件是呈现为Html DOM元素的对象,创建时需要对系统进行特殊处理。创建带有新关键字的组件时,不会发生这种处理,也不会涉及呈现器对象。
但是,您可以创建组件引用的集合,如下所示:
<Counter @ref="counter1" />
@code
{
private Counter counter1;
}
希望这能帮上忙。
https://stackoverflow.com/questions/62488291
复制