重写 BuildRenderTree 时是否可以获取 RenderFragments 列表?

2023-12-22

我想知道是否可以引用子元素ChildContent组件的参数。我可以显式地或通过使用级联参数将值从父组件传递给子组件,但是父组件没有很好的方法来“了解”父组件内部的元素ChildContent RenderFragment。一个可能的用例是UIList获取数量的组件UIListItems已添加到UIList渲染过程中的组件。

我试图覆盖BuildRenderTree我的组件上手动操作的方法ChildContent RenderFragment但我唯一的选择是渲染或忽略片段(我无法查看片段的内容)RenderFragment代表)。

    protected override void BuildRenderTree(RenderTreeBuilder builder)
    {
        int seq = 0;
        base.BuildRenderTree(builder);
        builder.OpenElement(seq++, "div");
        builder.AddContent(seq++, this.ChildContent);
        builder.CloseElement();
    }

我想知道下面这样的事情是否可能。请注意,下面的语法无效,只是一个说明要点的示例。

    protected int NumberOfItems{get;set;}

    protected override void BuildRenderTree(RenderTreeBuilder builder)
    {
        int seq = 0;
        base.BuildRenderTree(builder);
        builder.OpenElement(seq++, "div");
        foreach(var childFragment in this.ChildContent.GetFragments())
        {

           if(childFragment is UIListItem)
                NumberOfItems++;
           builder.AddContent(seq++,childFragment);
        }


        builder.CloseElement();
    }

正如 Issac 所说,您尝试解决问题的方式对于 Blazor 来说是不可能的。但是,子元素可以使用级联参数。这看起来似乎可以实现你想要的,但它只是从另一个方向实现的。让我尝试举个例子...

鉴于此设置

<ParentComponent>
    <ChildComponent></ChildComponent>
    <ChildComponent></ChildComponent>
    <ChildComponent></ChildComponent>
</ParentComponent>

我想你正在寻找这样的输出

<div>
    <p>Total Items: 3</p>
    <div>Child Component</div>
    <div>Child Component</div>
    <div>Child Component</div>
</div>

父组件

<div>
    <p>Total Items: @ItemCount</p>
    <CascadingValue Value="this">
        @ChildContent
    </CascadingValue>
</div>

@code {
    private int ItemCount;

    public void AddItem()
    {
        ItemCount++;
        StateHasChanged();
    }
}
<div>Child Component</div>

@code {
    [CascadingParameter] private ParentComponent Parent { get; set; }

    protected override void OnInitialized()
        => Parent.AddItem();
}

如果我正确理解了您的需求,这应该可以达到您想要的结果。

我想说的一件事是,尽量远离压倒一切BuildRenderTree,我写了一个博客文章 https://chrissainty.com/building-components-via-rendertreebuilder/关于如何正确地做到这一点,同时也指出为什么你可能不应该这样做。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

重写 BuildRenderTree 时是否可以获取 RenderFragments 列表? 的相关文章

随机推荐

  • 如何在导出的pdf中显示印地语字体?

    我正在尝试显示印地语字体在使用生成的pdf文件中iReport 我在中添加了印地语 ttf 字体iReport对于相同的 iReport工具正在正确显示印地语字体iReport查看器 但是当我将其导出到 pdf 文件时 我没有在 pdf 文
  • 确定文件是否为空的最佳方法(php)?

    我在模板中包含了一个 custom css 文件 以允许网站所有者添加自己的 CSS 规则 但是 当我发送文件时 它是空的 如果他们没有向其中添加任何规则 则加载它是没有意义的 确定其是否为空的最佳方法是什么 if 0 filesize f
  • Android 中的对话框被关闭或取消有什么区别?

    正如标题所说 Android 中对话框被关闭或取消有什么区别 通常 当对话框的工作完成并从屏幕上删除时 对话框就会被关闭 当用户想要退出对话框并按 后退 按钮时 对话框将被取消 例如 屏幕上有一个标准的是 否对话框 如果用户单击 否 则对话
  • 无法在react router dom中使用Link传递道具

    using this to pass props over Watch page but can t get any value 我是新手 所以可能会出现愚蠢的错误或信息不足 请让我知道任何额外信息 如果您正在使用react router
  • ostrstream 将常量字符串解释为指针

    我在清理旧 C C 应用程序的调试宏时遇到了这个问题 我们有一个继承自的 Tracer 类ostrstream 我知道自 C 98 以来它已被弃用 但这个应用程序是在 1998 年编写的 我们这样使用它 Tracer lt lt some
  • 如何从 matplotlib 将时间控制面板添加到 FuncAnimation

    我目前正在使用matplotlib animation FuncAnimation http matplotlib org api animation api html matplotlib animation FuncAnimation在
  • 注销后实时数据库onDisconnect不执行

    我已经实现了 Firebase 实时数据库存在系统 如官方 Firebase 文档中所示 我希望确保数据库安全 以便登录用户只能写入数据库中自己的存在条目 因此 在登录时 用户写入参考路径 auth authId connections并同
  • 图表不会显示数据点

    我正在尝试做一个Chart使用字典中的值但是我的Chart不显示任何内容 我的代码运行良好 没有错误 并且表单上有一个图表 我以前从未用 C 制作过图表 所以我不知道我在做什么 这是我的填充代码 如果我删除StatChart update
  • 更改JIT编译的最终值

    我注意到一件非常奇怪的事情 在通过反射更改最终字段后 返回该字段的方法始终给出旧值 我想这可能是因为 JIT 编译器 这是示例程序 public class Main private static final Main m new Main
  • 无法以编程方式启动 Windows Azure VM

    我正在执行 REST API 操作开始角色 http msdn microsoft com en us library jj157189 aspx 在链接中https management core windows net subscrip
  • RedHat 上的 Scipy 和 Scikit-learn 中未定义的符号

    我正在尝试在没有 root 权限的 64 位 Red Hat Enterprise 6 6 服务器上安装 Scikit Learn 我已经全新安装了 Python 2 7 9 Numpy 1 9 2 Scipy 0 15 1 和 Sciki
  • 使用 jQuery 更改模态内容

    我正在使用 twitter bootstrap 的模式来制作弹出表单 下面的代码显示了模式形式 第一情态形式 div class modal fade div class modal dialog modal dialog1 div cla
  • 如果不通过 createElementNS 处理,为什么动态 SVG 无法工作

    我试图在纯 JS 中操作 SVG 发现如果我不使用类似的方法 它就不会按预期运行createElementNS and setAttributeNS
  • 使用 Anaconda 或 Canopy 安装 Python 模块

    我玩过一点 Python 但从来不需要安装自己的包 我目前正在尝试编写一个读取 tiff 文件的程序 因此我尝试安装 libtiff 包 但我做了一场噩梦 首先 我使用的是 Anaconda 发行版和短语 conda install lib
  • 在 django 模板中输出排序的 python 字典

    我得到了一个 python 字典 如下所示 由于隐私原因 重要信息被替换为 xxx 我想在 django 模板中显示这个字典 但它应该是有序的 所以它应该以 A 开头 然后继续以 B 而不是 H 这是我的字典 缩短 A birthday d
  • 无法在 Mac 上找到 matplotlib 的字体缓存

    我对此进行了很多研究 但无法使其发挥作用 如何更改 matplotlib 的字体 根据我的研究 我认为我的问题是字体缓存 我在正确的文件夹中有 ttf 人们一直说 rm matplotlib fontList cache 是要使用的命令 但
  • 通过预定义索引分割Python字符串[重复]

    这个问题在这里已经有答案了 我有一个字符串 我想将其在特定位置拆分为字符串列表 分割点存储在单独的分割列表中 例如 test string thequickbrownfoxjumpsoverthelazydog split points 0
  • 在 JTable 中使用空列作为分隔符

    我正在尝试使用空列作为中的两列之间的分隔线JTable 这是我到目前为止所拥有的图片和代码 我知道我可以使用自定义更改外观TableCellRenderer 在我走这条路之前 有更好的方法吗 任何想法表示赞赏 import javax sw
  • 为什么我的 iPhone 上没有收到任何通知?

    在 Xcode8 3 上使用 swift 3 1 运行它 下面是我在 AppDelegate swift 中的代码 func application application UIApplication didFinishLaunchingW
  • 重写 BuildRenderTree 时是否可以获取 RenderFragments 列表?

    我想知道是否可以引用子元素ChildContent组件的参数 我可以显式地或通过使用级联参数将值从父组件传递给子组件 但是父组件没有很好的方法来 了解 父组件内部的元素ChildContent RenderFragment 一个可能的用例是