深入浅出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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律