类似于React,Blazor在其参数(React中的"props"(更改时重新渲染子组件。
这在基元类型中起到了预期的作用,但我还没有弄清楚如何控制自定义类型。
似乎简单的对象总是被认为是不同的,即使对象没有改变:
@page "/"
<h1>Hello, world!</h1>
<Nested Object="@myObject" />
<button @onclick="() => { }">clickme</button>
@code {
private Object myObject = new object();
}
在这里,Nested
组件总是在单击按钮时重新渲染,即使它是唯一的参数Object
从未更改。
我已经将Nested
定义为
<h3>
(last render at @DateTime.Now.TimeOfDay)
</h3>
@code {
[Parameter]
public Object Object { get; set; }
}
以简单地观察它何时重新渲染。
我还尝试定义一个新类型来覆盖Equals
、GetHashCode
并实现IEquatable<T>
,但效果是一样的。
React不会为了重新渲染的目的而认为引用相同的对象是不同的。
如何将非基本体数据传递给子组件,而不将子组件的重新渲染与父组件的重新呈现相结合?
只要属性更改可能导致UI更改,就应该调用StateHasChanged()
方法。