在Blazor的服务器端,经常会发现页面会加载两次的问题,这是因为默认情况下,Blazor的服务器端在初始化时会首先进行一次服务端代码的预处理,然后再进行一次浏览器端的渲染。因此,我们需要通过以下代码,在第一次初始化时将其跳过,仅在第二次渲染时进行页面的加载:
protected override async Task OnInitializedAsync()
{
if (_initialized) return;
// 防止在第一次Blazor服务端代码预处理时加载页面
if (!Context.IsConnected) return;
_initialized = true;
await LoadData();
}
在上述代码中,我们使用了一个名为“_initialized”的布尔变量来跟踪页面是否已被初始化。然后,我们在“OnInitializedAsync”方法中,添加了一个条件,首先检查是否已经连接到了Blazor服务端,以防止在第一次Blazor服务端代码预处理时加载页面。最后,在条件成功时,我们设置_initialized=true,并调用“LoadData”方法,来加载页面的数据。