onOnAfterRenderAsync之后未更新Blazor UI
我有一个Blazor服务器端页面,当用户转到该页面时需要加载数据。但是,在执行OnAfterRenderAsync后,它不会更新UI。数据加载正确,如果我创建了一个“刷新”按钮来标记页面,它就会工作 我有点像:onOnAfterRenderAsync之后未更新Blazor UI,blazor,blazor-server-side,Blazor,Blazor Server Side,我有一个Blazor服务器端页面,当用户转到该页面时需要加载数据。但是,在执行OnAfterRenderAsync后,它不会更新UI。数据加载正确,如果我创建了一个“刷新”按钮来标记页面,它就会工作 我有点像: @page "/mypage <button class="btn btn-primary" @onclick="Temp">Refresh</button> @if (_loading) { <
@page "/mypage
<button class="btn btn-primary" @onclick="Temp">Refresh</button>
@if (_loading)
{
<p>
<em>Loading...</em>
</p>
}
else
{
<p>
<em>Here is your data</em>
</p>
}
@code {
private bool _loading { get; set; }
protected override async Task OnInitializedAsync()
{
_loading = true;
}
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (!firstRender) return;
//Amazong loading code
_loading = false;
}
private void Temp()
{
_loading = false;
}
}
@page”/mypage
刷新
@如果(_加载)
{
加载。。。
}
其他的
{
这是你的数据
}
@代码{
私有bool_加载{get;set;}
受保护的重写异步任务OnInitializedAsync()
{
_加载=真;
}
AfterRenderAsync(bool firstRender)上受保护的重写异步任务
{
如果(!firstRender)返回;
//亚马逊装载代码
_加载=假;
}
私有void Temp()
{
_加载=假;
}
}
在AfterRenderAsync上单步执行显示\u loading
正确设置为false。在Temp()
中单步执行显示\u loading
设置为false
我猜在RenderAsync
之后,不会更新DOM,事实上,单击按钮会强制更新DOM。首先,您应该加载OnInitialized(异步)对中的数据。
如果将代码放置在OnAfterRender(异步)对中,这会更改组件的状态,例如:\u loading=false;
,则应手动调用StateHasChanged方法,该方法通知组件其状态已更改,并应重新呈现
and if I create a "refresh" button to flag the page it works.
它重新呈现并不是因为您“标记页面”…在Blazor中,UI事件(如单击事件)会自动调用StateHasChanged方法。当Blazor处于开发的第一阶段时,我们必须手动调用StateHasChanged方法。首先,您应该在初始化(异步)对中加载数据。
如果将代码放置在OnAfterRender(异步)对中,这会更改组件的状态,例如:\u loading=false;
,则应手动调用StateHasChanged方法,该方法通知组件其状态已更改,并应重新呈现
and if I create a "refresh" button to flag the page it works.
它重新呈现并不是因为您“标记页面”…在Blazor中,UI事件(如单击事件)会自动调用StateHasChanged方法。当Blazor处于开发的第一阶段时,我们必须手动调用StateHasChanged方法。我的方法是使用初始化事件
例如,如果正在加载类别列表,则可以在razor标记中应用以下测试条件:
@if (categories == null && _loadFailed)
{
<h1 class="text-danger">The data has failed to load please try again in a little bit..</h1>
}
else if (categories == null)
{
<h1 class="text-success">Loading...</h1>
<div style="display:normal;margin:auto" class="loader"></div>
}
else if (categories.Count == 0)
{
<text>No categories found</text>
}
else...
@if(categories==null&&u加载失败)
{
数据加载失败,请稍后再试。。
}
else if(categories==null)
{
加载。。。
}
else if(categories.Count==0)
{
找不到类别
}
其他的
我的方法是使用初始化事件
例如,如果正在加载类别列表,则可以在razor标记中应用以下测试条件:
@if (categories == null && _loadFailed)
{
<h1 class="text-danger">The data has failed to load please try again in a little bit..</h1>
}
else if (categories == null)
{
<h1 class="text-success">Loading...</h1>
<div style="display:normal;margin:auto" class="loader"></div>
}
else if (categories.Count == 0)
{
<text>No categories found</text>
}
else...
@if(categories==null&&u加载失败)
{
数据加载失败,请稍后再试。。
}
else if(categories==null)
{
加载。。。
}
else if(categories.Count==0)
{
找不到类别
}
其他的
我遇到的问题是将加载置于OnInitialized,导致页面未加载我遇到的问题是将加载置于OnInitialized,导致页面未加载