Razor 组件和页面都有一个 OnAfterRender
生命周期方法。当您有 <SomeComponent>
在您的 index.razor
, index.razor
的 OnAfterRender
首先触发,然后是 SomeComponent.OnAfterRender
之后发生火灾。
假设在 Razor 页面上你需要做一些工作,但只能在SomeComponent.OnAfterRender
之后才能做。火灾。这样做的合适方法是什么?
这很重要,因为组件的支持 HTML 直到它的 OnAfterRender
才准备好(可能不存在)。火灾。换句话说, Razor 页面作者如何知道其组件何时相当于 DOM 就绪?
最佳答案
你可以让你的子组件暴露一个 Action
它在呈现后执行的参数,就像这样。
[Parameter]
public Action AfterRender { get; set; }
protected override OnAfterRender(bool firstRender)
{
Action?.Invoke();
}
在父
<MyChild AfterRender=@SomeMethodInParentComponent/>
我建议
Action
而不是 EventCallback
因为我怀疑可能会发生以下过程AfterRender
参数)OnAfterRender
方法将调用其 AfterRender
参数使用
Action
而不是 EventCallback
将避免这种情况。但是,如果您将其他参数值(可能会更改)从父级传递给子级,则应使用 EventCallback。在这种情况下,您需要覆盖
ShouldRender
在您的子组件中,因此它仅在其工作状态实际发生变化时才呈现。您可以通过覆盖
SetParametersAsync
来检查状态是否已更改。并做这样的事情。private bool NeedsRendering = true; // Always true for first render
protected override bool ShouldRender => NeedsRendering; // Render only if we say so
protected override void SetParameters(ParameterView parameters)
{
string oldProperty1 = Property1;
byte oldSomethingElse = SomethingElse;
base.SetParameters(parameters);
if (oldProperty1 != Property1 || oldSomethingElse != somethingElse)
{
NeedsRendering = true;
}
}
protected override async Task OnAfterRenderAsync()
{
NeedsRendering = false; // We are up to do, not more renders until state changes
// Do your other stuff
AfterRender?.Invoke();
}
关于c# - Razor 页面等待 Blazor 组件完成渲染的规范方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62175233/