未调用OnInitializedAsync方法



我浏览到abc.razor OnInitializedAsync((方法被调用。

现在在OnvalidSubmit方法中,我有以下代码

NavManager.NavigateTo("/abc?rid=1", false, true);

这意味着它应该再次导航到abc.razor页面。它确实导航,但不调用OnInitializedAsync((方法?

为什么会这样?

如果导航到self,即导航到同一页面,Router组件会将同一路由组件传递到App中的RouteView中。

渲染器看不到任何组件更改,因此将事件视为重新渲染。OnInitialized{Async}未运行。

则运行OnParametersSet{Async},并且将更新Rid参数。因此,使用OnParametersSet{Async}作为逻辑。

这是我的演示页面:

@page "/Reload"
<h3>Reload</h3>
@inject NavigationManager NavManager
<div class="alert alert-info">
@this.Rid
</div>
<div class="alert alert-primary">
@this.value
</div>
<BasicComponent RID=@this.Rid />
<div class="m-2">
<button class="btn btn-primary" @onclick=this.ReloadComponent>Reload</button>
</div>
@code {
private string value = string.Empty;
[Parameter]
[SupplyParameterFromQuery]
public string? Rid { get; set; }
private void ReloadComponent()
{
NavManager.NavigateTo($"/Reload?Rid={DateTime.Now.ToLongTimeString()}");
}
protected override void OnParametersSet()
{
value = $"Reloaded at {DateTime.Now.ToLongTimeString()}";
}
}

和BasicComponent.razor:

<h3>BasicComponent</h3>
<div class="alert alert-dark">
@RID
</div>
<div class="alert alert-secondary">
@this.value
</div>
@code {
private string value = string.Empty;
[Parameter] public string RID { get; set; } = string.Empty;
protected override void OnParametersSet()
{
value = $"Reloaded at {DateTime.Now.ToLongTimeString()}";
}
}

供参考

ComponentBase中的相关代码如下所示。_initialized已经为真。

public virtual Task SetParametersAsync(ParameterView parameters)
{
parameters.SetParameterProperties(this);
if (!_initialized)
{
_initialized = true;
return RunInitAndSetParametersAsync();
}
else
{
return CallOnParametersSetAsync();
}
}

相关内容

  • 没有找到相关文章

最新更新