在Blazor ComponentBase类中获取数据
每个Blazor组件都有一个方法在Blazor ComponentBase类中获取数据,blazor,Blazor,每个Blazor组件都有一个方法OnInitializedAsync(),可以覆盖该方法。 对于任何调用来说,它似乎都是一个很好的地方,用于获取组件渲染期间应使用的数据,例如: protected override async Task OnInitializedAsync() { var dataForRendering = await SomeHttpClient.RetrieveSomeData(); } 但是,Blazor组件中有一个已知的行为,OnInitializedAsy
OnInitializedAsync()
,可以覆盖该方法。
对于任何调用来说,它似乎都是一个很好的地方,用于获取组件渲染期间应使用的数据,例如:
protected override async Task OnInitializedAsync()
{
var dataForRendering = await SomeHttpClient.RetrieveSomeData();
}
但是,Blazor组件中有一个已知的行为,OnInitializedAsync()
方法被触发两次。在中有关于如何处理的说明
建议检查ComponentContext.IsConnected
状态,该状态只允许触发一次所需操作
然而,安告诉我们应该
删除IComponentContext
的任何用法,并将预渲染期间不应运行的任何逻辑移动到OnAfterRender
或OnAfterRenderAsync
在这里,也不可以使用AfterRenderAsync。是的,它只被激发一次,但是在激发它时,组件已经被渲染,并且检索任何应该用于渲染的数据已经晚了
因此,问题是:
这将禁用预渲染功能。没有预渲染,没有第二次执行代码
这样加载组件渲染的数据是个好主意吗?也许有更好的方法将数据传递给组件
使用数据初始化组件的方法是使用OnInitialized(异步)对
OnAfterRender(异步)对不适合用于此目的,尽管它在小规模数据加载时似乎可以很好地渲染。在呈现Blazor组件之后,它们最适合用于初始化JavaScript组件
希望这有助于
<app>
<component type="typeof(App)" render-mode="Server" />
</app>