• 深入浅出Blazor webassembly之理解RenderFragment


    Razor 的DOM可以使用html直接写, 也可以使用 RenderFragment C#委托方法写.

    RenderFragment C#代理方法会由 Blazor Renderer 引擎自动调用, 我们不应该主动调用,  可将它们认为作为  html snippet用于razor 的 html中.

    对于SPA的整个页面, Blazor Renderer会维护一个 RenderTree, 可以将整个DOM tree想象成一个 RenderTree, Renderer引擎会采用 diff 算法来检查DOM是否需要更新, 如果检查到某个节点需要更新, Renderer 引擎调用我们的 RenderFragment 委托, 并将 RenderTreeBuilder 作为委托入参, 完成重绘工作.

    ========================================

    Html 写法与等效的RenderFragment 写法

    ========================================

    @page "/hello"
    <div>
        hello world
    </div>
    @page "/hello2"
    @using Microsoft.AspNetCore.Components
    @using Microsoft.AspNetCore.Components.Rendering 
    
    @HelloContent2 
    
    @code{
        protected RenderFragment HelloContent2=(RenderTreeBuilder builder)=>{
            builder.OpenElement(0,"div");
            builder.AddContent(1, "hello world");
            builder.CloseElement();
        };
    }

    ========================================

    Inline RenderFragment 写法

    ========================================

    普通的RenderFragment 写法繁琐, Blazor 其实还支持 inline 写法, 即在 C# 代码块中直接写html.

    Inline 写法的要求是委托形参名必需是 __builder , 前面两个下划线,  否则编译会报错.

    @page "/hello3"
    @using Microsoft.AspNetCore.Components
    @using Microsoft.AspNetCore.Components.Rendering 
    
    @HelloContent3 
    
    @code{
        protected RenderFragment HelloContent3=(RenderTreeBuilder __builder)=>{
           <div>
                hello world
            </div>
        };
    }

    ========================================

    支持泛型的 RenderFragment 写法

    =======================================

    @page "/hello4"
    @using Microsoft.AspNetCore.Components
    @using Microsoft.AspNetCore.Components.Rendering 
    
    @HelloContent4("world")
    
    @code{
        protected RenderFragment<string> HelloContent4 =(message)=> (RenderTreeBuilder builder)=>{
            builder.OpenElement(0,"div");
            builder.AddContent(1, "hello "+message);
            builder.CloseElement();
        };
    }

    ========================================

    参考

    ========================================

    https://shauncurtis.github.io/articles/Blazor-Components.html

  • 相关阅读:
    [SQL server] IF ELSE 和 CASE WHEN 的用法
    SQL server游标基本结构
    SQLserver查看某个视图的创建语句
    SqlServer和Oracle修改表结构语句
    IE浏览器部分js代码不生效的问题
    SQL server将查询到的多行结果,拼接成字符串(列转行)
    SQL server将某个字符串将按指定字符分解成子字符串(行转列)
    安装weblogic时,运行configure.cmd报错、闪退、无法创建域
    黑苹果相关工具
    黑苹果安装问题集
  • 原文地址:https://www.cnblogs.com/harrychinese/p/blazor_RenderFragment.html
Copyright © 2020-2023  润新知