在Blazor中,子组件通过使用EventCallback将本地事件向父组件传递。然而,当该事件是一个集合并且值发生变化时,可能会出现问题,导致父组件无法正确地接收到事件。这是因为Blazor中的集合被视为引用类型,在内存中传递时只传递引用,而不是整个集合。因此,父组件无法侦听子组件集合值的更改。
为了解决这个问题,需要为子组件中的事件传递新的集合实例。请参考以下代码示例:
父组件:
Items in Parent: @string.Join(",", data)
@code {
List data = new List() { "one", "two", "three" };
protected void HandleDataChanged(List newData)
{
data = newData;
}
}
子组件:
@code {
[Parameter] public List Data { get; set; }
[Parameter] public EventCallback> OnDataChanged { get; set; }
protected async Task AddItemToData()
{
Data.Add("new item");
await OnDataChanged.InvokeAsync(new List(Data));
}
protected async Task ChangeData()
{
Data[0] = "changed item";
await OnDataChanged.InvokeAsync(new List(Data));
}
}
在这个示例中,我们为子组件中的Data变量创建了新的集合实例,然后使用OnDataChanged事件将其传递到父组件。这使得父组件能够正确地侦听Data的值更
上一篇:Blazor字段得到null