我有一个取决于其父类的 Razor 页面和第二个子类,它有自己的类并从其父类接收数据,我的问题是对 api 的第二次调用,数据没有传递给第二个 child ,当其父级更改其数据时,第二个子级不会被渲染,但它适用于第一个渲染并且正在传递数据。
父 Razor
@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; }
}
父 Razor
@inherits ParentBase;
@* Passing OnClick Parameter to call callApi*@
<FirstChild OnClick="@callApi" />
<SecondChild data="@data" />
关于c# - Blazor 将数据从父级传递给子级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62172754/