C# 什么';Razor页面等待Blazor组件完成渲染的标准方式是什么?

C# 什么';Razor页面等待Blazor组件完成渲染的标准方式是什么?,c#,razor,blazor,C#,Razor,Blazor,Razor组件和页面都有一个OnAfterRender生命周期方法。当您的index.razor中有时,index.razor的OnAfterRender将首先激发,然后SomeComponent.OnAfterRender将随后激发 假设在razor页面上,您需要做一些工作,但只能在触发SomeComponent.OnAfterRender后才能完成。这样做的适当方式是什么 这可能很重要,因为组件的支持HTML在其OnAfterRender激发之前尚未准备就绪(可能不存在)。换句话说,razo

Razor组件和页面都有一个
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();
}