我有一个剃须刀页面,该页面取决于其父级的类,并且有一个具有其自己的类并从其父级接收数据的第二个孩子,我的问题在于对api的第二次调用,数据没有传递给第二个孩子,当第二个子项的父级更改其数据时,第二个子项未处于渲染状态,但它在第一个渲染器上起作用并且正在传递数据。
亲子剃刀
@inherits ParentBase;
<FirstChild/>
<SecondChild data="@data"/>
FirstChild.razor
@inherits ParentBase;
// call its parent method
<span @onclick='(() => callApi())'/>
ParentBase.cs
public class ParentBase : ComponentBase
{
public Data data { get; set; }
protected override async Task OnInitializedAsync()
{
data = await Services.GetData();
}
// call from a child
public void callApi
{
data = await Services.GetData();
}
}
SecondChild.razor
<Table data="@data"/>
SecondChildBase.cs
public class SecondChildBase : ComponentBase
{
[Parameter]
public Data data { get; set; }
protected override void OnParametersSet()
{
// this is not getting called
StateHasChanged();
Console.WriteLine(data);
}
}
仅仅是因为Parent.razor
和FirstChild.razor
继承自同一个类,并不意味着两个类(public Data data { get; set; }
)的数据在更改时将具有相同的值。
调用callApi
时FirstChild
,它将更改其自身的名称data
,如果要更改父代的名称data
,则需要传递一个参数,FirstChild
该参数将span
是单击时要调用的函数,并且将调用Parent
的callApi
。
FirstChild.razor
<span @onclick="OnClick">Call Parent function</span>
@code
{
// Call this EventCallback when the span is clicked
[Parameter]
public EventCallback OnClick { get; set; }
}
亲子剃刀
@inherits ParentBase;
@* Passing OnClick Parameter to call callApi*@
<FirstChild OnClick="@callApi" />
<SecondChild data="@data" />
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句