我浏览到 abc.razor OnInitializedAsync() 方法被调用。
现在在 OnvalidSubmit 方法中我有以下代码
NavManager.NavigateTo("/abc?rid=1", false, true);
Run Code Online (Sandbox Code Playgroud)
这意味着它应该再次导航到 abc.razor 页面。它确实导航但不调用 OnInitializedAsync() 方法?
为什么这样?
如果您导航到 self,即导航到同一页面,则 Router 组件会将相同的路由组件传递到RouteViewin中App。
渲染器没有看到任何组件更改,因此将该事件视为重新渲染。 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()}";
}
}
Run Code Online (Sandbox Code Playgroud)
和 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()}";
}
}
Run Code Online (Sandbox Code Playgroud)
中的相关代码ComponentBase如下所示。 _initialized已经是真的了。
public virtual Task SetParametersAsync(ParameterView parameters)
{
parameters.SetParameterProperties(this);
if (!_initialized)
{
_initialized = true;
return RunInitAndSetParametersAsync();
}
else
{
return CallOnParametersSetAsync();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
934 次 |
| 最近记录: |