【问题标题】:Creating a component by overriding BlazorComponent.BuildRenderTree(RenderTreeBuilder builder)通过覆盖 BlazorComponent.BuildRenderTree(RenderTreeBuilder builder) 创建组件
【发布时间】:2018-12-02 17:10:25
【问题描述】:

我正在学习 Blazor。 https://learn-blazor.com/

通过覆盖BlazorComponent 类的BuildRenderTree(RenderTreeBuilder builder) 方法,我在C# 中创建组件时遇到了一些困难。

这是我的课:

   public class TestComponent : BlazorComponent
    {
        protected override void BuildRenderTree(RenderTreeBuilder builder)
        {
            builder.OpenElement(1, "p");
            builder.OpenElement(2, "strong");
            builder.AddContent(3, "hello");
            builder.CloseElement();
            builder.CloseElement();

            base.BuildRenderTree(builder); // With or without this line it doesn't work
        }
    }

我在我的页面中这样使用它:

<TestComponent></TestComponent>

我已经在最后一行base.BuildRenderTree(builder); 的情况下对其进行了测试,但无论哪种方式它都不会呈现。我让组件变得非常简单(只有一个段落标签、一个强标签和一个内容),所以我不知道为什么它不会呈现。代码构建得很好。

谁能看看我做错了什么?

【问题讨论】:

  • 出于好奇,您为什么要尝试以这种方式构建您的 blazor 组件,而不是通过您的 .cshtml 文件惯用地构建它?
  • 部分只是为了了解它在某些情况下总是会派上用场。
  • 部分原因是我可以开始为我未来的项目创建一个可重用的 Blazor 组件库。一旦我得到这个简单的例子,我希望创建更复杂的使用 RenderFragment 属性的例子,允许我或其他开发人员指定他们自己的 HTML,这些 HTML 可以作为控件的一部分呈现。
  • +1 仅学习如何做事以及如何工作。但话虽如此,我认为使用渲染片段创建可重用组件不需要这种方法。我在我的项目中编写了几个组件,这些组件完全通过.cshtml 定义,但通过RenderFragment 属性填充其内容。 IMO,这种方法更容易使用,这就是我提出问题的原因。
  • 我正在开发类似 UsernameValidator 组件的东西,它基于 AsyncValidator 抽象组件,可以这样使用:检查您的用户名尚未注册...哦不!该名称已注册。选择另一个,或者您是要登录 ?完美!

标签: c# .net blazor


【解决方案1】:

首先不要再使用那个网站了。我通过该网站了解了 Blazor。这是一个很棒的网站,这个人做了很棒的工作。但很可惜,他停止了更新,至少在过去六个月里是这样。材料已经陈旧而无用。现在,我不知道有什么好的替代品。

试试这个:

  1. base.BuildRenderTree(builder); 放在 BuildRenderTree 方法的开头,而不是结尾。

  2. 使用ComponentBase 而不是BlazorComponent... BlazorComponent 已死...

  3. 序列参数始终以值0 开头。

【讨论】:

  • 嗨!非常感谢您的快速响应和良好的建议!当你知道怎么做时很容易,对吧?因此,我将 base.BuilderRenderTree(builder) 调用移至子例程的开头。但是你说我应该继承的这个 ComponentBase 类呢?我在 GitHub 的源代码中找不到它。请问 ComponentBase 应该在哪个程序集和命名空间中找到?
  • +1 获取有关 BlazorComponent 死亡的信息。不幸的是,在教程网站上找不到任何关于此的内容
  • &qki,一开始组件对象的基类被称为 BlazorComponent ...随着时间的流逝,它从 BlazorComponent 更改为 ComponentBase,就像 UriHelper 更改为 NavigationManager 一样。随着框架的创建,Blazor 中的许多对象都经历了名称更改等等……当然,没有教程会告诉你这些。教程是关于框架的当前状态,而不是关于框架开发的历史。
猜你喜欢
  • 1970-01-01
  • 2021-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多