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.