多个子组件更新相同的参数

  • 本文关键字:参数 更新 组件 blazor
  • 更新时间 :
  • 英文 :


我正在尝试创建由与父组件绑定的数据相关的较小组件组成的组件,但我无法更新这些子组件中的变量。这样做的想法是能够在其他组件中重用它们。

我将展示一个小例子。

当父组件被称为OnInitializedAsync添加值到列表,这是显示在子组件2正确,但如果我添加一个新的元素到该列表在其他子组件1列表永远不会在视图中更新(数据已在数据库中更新)

父组件(基列表变量)

<CascadingValue Value="@thelist">
<Child1></child1>
<Child2></child2>
<CascadingValue>
@code {
private List<thetype> thelist { get; set; }
protected override async Task OnInitializedAsync()
{
thelist = service.loadvalues()
}
}

子组件1 (add values to list)

Button UpdateList
@code {
[CascadingParameter]
public List<thetype> thelist { get; set; }
private async Task UpdateList()
{
thislist changed
}
}

子组件2 (show list)

Show list
@code {
[CascadingParameter]
public List<thetype> thelist { get; set; }
}

我也尝试过使用EventCallback,这是我用来传递参数的方式,但这种方式也不起作用,是一个参数与多个级联组件共享。

<Child1 thelist="@thelist"></child1>
<Child2 thelist="@thelist"></child2>
[Parameter]
public List<thetype> thelist{ get; set; }
[Parameter]
public EventCallback<ChangeEventArgs> thelistChanged { get; set; }

和使用StateHasChanged,但结果是一样的。

通过这两种方式,更新后的列表都可以用新值显示在父组件中,但不能显示在子列表组件中。

我希望你明白我想问什么。我找到的所有帖子和文章都是关于在组件之间传递参数的,但这并不是我真正的问题。我希望当一个组件通知父组件发生更改时,该更改会被复制到该父组件的所有后代组件中。

谢谢。

我已经找到了这个解决方案的工作链接解决方案

使用动作参数向父组件发出某个参数已更改的警报。这是一个解决方案和工作,但我仍然不明白为什么我的代码不与EventCallback工作。

这里我将它应用到我的例子

父组件(基列表变量)

<CascadingValue Value="@thelist">
<Child1 InvokeChange="@UpdateTheList"></child1>
<Child2></child2>
<CascadingValue>
@code {
private List<thetype> thelist { get; set; }
protected override async Task OnInitializedAsync()
{
thelist = service.loadvalues()
}
private void UpdateTheList(List<thetype> updatedList)
{
thelist = updatedList;
StateHasChanged();
}
}

子组件1 (add values to list)

Button UpdateList
@code {
[Parameter]
public Action<List<thetype>> InvokeChange { get; set; }
[CascadingParameter]
public List<thetype> thelist { get; set; }
private async Task UpdateList()
{
thislist changed;
InvokeChange?.Invoke(thelist);
}
}

子组件2 (show list)

Show list
@code {
[CascadingParameter]
public List<thetype> thelist { get; set; }
}