C# 什么';Razor页面等待Blazor组件完成渲染的标准方式是什么?
Razor组件和页面都有一个C# 什么';Razor页面等待Blazor组件完成渲染的标准方式是什么?,c#,razor,blazor,C#,Razor,Blazor,Razor组件和页面都有一个OnAfterRender生命周期方法。当您的index.razor中有时,index.razor的OnAfterRender将首先激发,然后SomeComponent.OnAfterRender将随后激发 假设在razor页面上,您需要做一些工作,但只能在触发SomeComponent.OnAfterRender后才能完成。这样做的适当方式是什么 这可能很重要,因为组件的支持HTML在其OnAfterRender激发之前尚未准备就绪(可能不存在)。换句话说,razo
OnAfterRender
生命周期方法。当您的index.razor
中有
时,index.razor
的OnAfterRender
将首先激发,然后SomeComponent.OnAfterRender
将随后激发
假设在razor页面上,您需要做一些工作,但只能在触发SomeComponent.OnAfterRender
后才能完成。这样做的适当方式是什么
这可能很重要,因为组件的支持HTML在其
OnAfterRender
激发之前尚未准备就绪(可能不存在)。换句话说,razor页面的作者如何知道其组件何时等同于DOM ready呢?您可以让您的子组件公开一个动作
参数,该参数在呈现后执行,如下所示
[Parameter]
public Action AfterRender { get; set; }
protected override OnAfterRender(bool firstRender)
{
Action?.Invoke();
}
在父母中
<MyChild AfterRender=@SomeMethodInParentComponent/>
父级不应处理其任何子级内容的生成标记。子组件本身应该这样做。你想实现什么?@PeterMorris想象一个Blazor组件,它是一个图表或图表库,你可以在其中向你的页面添加数据,然后在页面准备好后用数据设置它或查询它(可能是它的大小或颜色)。我可能误解了应该如何编写这样的组件,或者组件作者应该添加某种加载事件,但我希望Blazor组件以这种方式拥有自己的“ready”版本。为什么图表需要知道其他组件何时呈现?它不会,包含图表的页面可能需要知道图表何时呈现,或是否能够呈现某些内容等。呈现应该是即时的。如果不是这样,则需要加快渲染速度。这是真实的用例吗?谢谢,非常全面。
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();
}