In a Blazor server component, I use OnInitializedAsync() to connect an event from an injected service:
protected override async Task OnInitializedAsync()
{
_fooRepository.SomethingChanged += OnSomethingChanged;
await Refresh();
}
public void Dispose()
{
_fooRepository.SomethingChanged -= OnSomethingChanged;
}
private async Task Refresh()
{
this.FooData = await LoadDataFromRepository();
}
Unfortunately, according to the documentation, the OnInitializedAsync method may be called twice, depending on the render mode.
I found some examples that recommend using OnAfterRenderAsync for the initialization logic instead:
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
_fooRepository.SomethingChanged += OnSomethingChanged;
await Refresh();
}
}
[... Dispose and Refresh as above... ]
Are there disadvantages when using OnAfterRenderAsync instead of OnInitializedAsync? It seems to me that I should abandon OnInitializedAsync and default to OnAfterRenderAsync instead.