【发布时间】:2021-11-18 14:35:42
【问题描述】:
尝试使用 AppState 类传递变量,当调用发生在同一个组件中时,组件会更新,但在父级触发事件时不会在子组件中。
家长
@code {
[Parameter]
public int Id { get; set; }
WikiDetailDto wikiDetail = null;
protected async override Task OnInitializedAsync()
{
Console.WriteLine("going in detail INIT");
AppState.OnCurrentWikiPageChanged += StateHasChanged;
AppState.SetCurrentWikiPage(await wikiPageService.GetDetail(Id));
wikiDetail = AppState.CurrentWikiPage;
Console.WriteLine("Retrieved WikiDetail!");
}
}
儿童
<MudDrawer Anchor="Anchor.End" Open="true">
<MudDrawerHeader>Recommendations</MudDrawerHeader>
@if(AppState.CurrentWikiPage != null)
{
@(RecommendedWikiPages = CalculateReccomendedWikis(AppState.CurrentWikiPage));
if(RecommendedWikiPages != null)
{
foreach(var p in RecommendedWikiPages)
{
<MudCard>
<MudCardContent>
<MudText>@p.Name</MudText>
</MudCardContent>
</MudCard>
}
}
}
else
{
<p>Loading...</p>
}
当 AppState.CurrentWikiPage 更新时,它不会检查 cild 的 if 语句。 这里的最佳做法是什么?我不想使用级联值。
AppState
public WikiDetailDto CurrentWikiPage { get; set; }
public event Action OnCurrentWikiPageChanged;
public void SetCurrentWikiPage(WikiDetailDto wikiPage)
{
CurrentWikiPage = wikiPage;
OnCurrentWikiPageChanged?.Invoke();
}
【问题讨论】:
-
你能不使用 eventCallback 吗?
-
看看这个项目,它是您想要实现的目标的实现,但不必为每个组件或属性注册 Changed 事件。 github.com/dagmanolis/Blaast
标签: c# .net blazor blazor-webassembly