关于 blazor-expert
blazor-expert 是面向 Blazor 开发的分模块指导技能,按任务引导查阅相应资源文件。内容覆盖组件、状态、路由、表单、安全与性能,并提供工作流和故障排查建议。
主要功能
- 01按任务选择指导资源
- 02组件与生命周期参考
- 03状态管理和事件处理
- 04路由、表单与权限指南
- 05性能优化与故障排查
适用场景
- 01构建可复用的 Blazor 组件
- 02实现表单和输入验证
- 03设置身份验证及受保护页面
- 04排查渲染或连接问题
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ markpitt/ claude-skills --skill blazor-expert安装后在 Claude Code 中输入/blazor-expert确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
resources/authentication-authorization.mdcomponents-lifecycle.mdforms-validation.mdperformance-advanced.mdrouting-navigation.mdstate-management-events.md详细介绍
Blazor 专家 - 编排中心
为使用 Blazor 开发应用提供专家级指导。Blazor 是 Microsoft 的框架,可使用 C# 而非 JavaScript 构建交互式 Web UI。
快速参考:何时加载哪个资源
| 任务 | 加载资源 | 主要主题 |
|---|---|---|
| 构建组件、处理生命周期事件 | components-lifecycle.md | 组件结构、生命周期方法、参数、级联值、RenderFragment 组合 |
| 管理组件状态、处理事件 | state-management-events.md | 本地状态、EventCallback、数据绑定、级联状态、基于服务的状态 |
| 配置路由、在页面间导航 | routing-navigation.md | 路由参数、约束、导航、NavLink、查询字符串、布局 |
| 构建表单、验证用户输入 | forms-validation.md | EditForm、输入组件、DataAnnotations 验证、自定义验证器 |
| 设置身份验证和授权 | authentication-authorization.md | 身份验证设置、AuthorizeView、Authorize 特性、策略、声明 |
| 优化性能、使用 JavaScript 互操作 | performance-advanced.md | 渲染优化、虚拟化、JS 互操作、延迟加载、WASM 最佳实践 |
编排协议
阶段 1:任务分析
确定你的主要目标:
- 构建 UI → 加载 components-lifecycle.md
- 状态处理 → 加载 state-management-events.md
- 导航 → 加载 routing-navigation.md
- 数据输入 → 加载 forms-validation.md
- 用户访问 → 加载 authentication-authorization.md
- 速度/效率 → 加载 performance-advanced.md
阶段 2:加载资源
打开推荐的资源文件,并使用 Ctrl+F 搜索你的具体需求。每个资源都按主题组织,并提供可运行的代码示例。
阶段 3:实现与验证
- 遵循资源中的代码模式
- 根据你的具体需求进行调整
- 在合适的托管模型(Server/WASM/Hybrid)中测试
- 如果出现问题,请查看故障排除部分
Blazor 托管模型概览
Blazor Server
- 工作方式:通过 SignalR 在服务器上运行
- 适用场景:业务应用、需要完整 .NET 运行时、下载体积小
- 权衡:延迟较高、需要保持连接、消耗较多服务器资源
Blazor WebAssembly
- 工作方式:通过 WebAssembly 在浏览器中运行
- 适用场景:PWA、离线应用、不依赖服务器、以客户端为主的应用
- 权衡:初始下载较大、.NET API 有限、冷启动较慢
Blazor Hybrid
- 工作方式:在 MAUI/WPF/WinForms 中运行,并使用 Blazor UI
- 适用场景:跨平台桌面/移动应用
- 权衡:需要考虑平台特性、依赖项更多
决策:根据部署环境、离线需求和服务器限制进行选择。
常见实现工作流
场景 1:构建数据录入组件
- 阅读 components-lifecycle.md - 组件结构部分
- 阅读 state-management-events.md - EventCallback 模式
- 阅读 forms-validation.md - EditForm 组件
- 组合:创建带参数的组件 → 捕获用户输入 → 验证 → 通知父组件
场景 2:实现用户身份验证和受保护页面
- 阅读 authentication-authorization.md - 设置部分
- 阅读 routing-navigation.md - 布局部分
- 阅读 authentication-authorization.md - AuthorizeView 部分
- 组合:配置身份验证 → 创建登录页面 → 保护路由 → 在组件中检查身份验证
场景 3:构建带搜索/筛选功能的交互式列表
- 阅读 routing-navigation.md——查询字符串部分
- 阅读 state-management-events.md——数据绑定部分
- 阅读 performance-advanced.md——虚拟化部分
- 组合使用:捕获搜索输入 → 更新 URL 查询参数 → 获取筛选后的数据 → 数据量大时进行虚拟化
场景 4:优化现有应用的性能
- 阅读 performance-advanced.md——所有部分
- 找出性能瓶颈:
- 不必要的重新渲染?→ 重写 ShouldRender,使用 @key 指令
- 列表过大?→ 虚拟化
- JS 延迟?→ 模块隔离模式
- 应用资源中介绍的针对性优化
Blazor 核心概念
组件架构
- 组件:独立的 UI 单元,可包含可选逻辑
- 参数:组件的输入,使组件可复用
- 级联值:无需显式参数即可与后代共享状态
- 事件:通过 EventCallback 实现从子级到父级的通信
- 布局:用于保持页面结构一致的父级包装组件
状态管理
- 本地状态:组件专属的字段和属性
- 级联值:与后代共享状态
- 服务:通过依赖注入管理应用范围的状态
- 事件绑定:响应用户交互
- 数据绑定:与 UI 双向同步
路由与导航
- @page 指令:使组件可通过路由访问
- 路由参数:通过 URL 传递数据(
{id:int}) - 导航:通过 NavigationManager 进行编程式导航
- NavLink:可突出显示当前路由的 UI 组件
- 布局:用通用结构包装页面
表单与验证
- EditForm:支持验证的表单组件
- 输入组件:类型化控件(InputText、InputNumber 等)
- 验证器:DataAnnotations 特性或自定义逻辑
- EventCallback:通知父级表单发生更改
- 消息:向用户显示验证错误
身份验证与授权
- 声明与角色:识别用户并定义访问级别
- 策略:细粒度授权规则
- Authorize 特性:保护页面,防止未经授权的访问
- AuthorizeView:根据权限有条件地渲染内容
- AuthenticationStateProvider:获取当前用户信息
性能优化
- ShouldRender():防止不必要的重新渲染
- @key 指令:帮助差异比对算法匹配列表项
- 虚拟化:在大型列表中仅渲染可见项
- JS 互操作:从 C# 调用 JavaScript,反之亦然
- AOT/裁剪:减少 WASM 下载大小(生产环境)
最佳实践要点
组件设计
✅ 单一职责——每个组件只有一个明确用途
✅ 组合——使用 RenderFragments 实现灵活布局
✅ 参数清晰——使用描述性名称,并用 [EditorRequired] 标记必需参数
✅ 正确释放——实现 IDisposable 以清理资源
✅ 基于事件的通信——使用 EventCallback 实现从子级到父级的更新
状态管理
✅ 优先使用 EventCallback 而非 Action——正确处理异步操作
✅ 不可变更新——创建新对象/集合,不要直接修改
✅ 基于服务的状态——使用作用域服务共享状态
✅ 取消订阅事件——在 Dispose 中防止内存泄漏
✅ 后台线程使用 InvokeAsync——线程安全地更新状态
路由与导航
✅ 路由约束——使用 :int、:guid 等验证格式
✅ NavLink 组件——自动突出显示当前路由
✅ 注销后使用 forceLoad——清除客户端状态
✅ ReturnUrl 模式——登录后重定向回原页面
✅ 查询字符串——在导航过程中保留筛选条件/分页状态
表单与验证
✅ EditForm + DataAnnotationsValidator - 内置验证 ✅ ValidationMessage - 显示字段级错误 ✅ 自定义验证器 - 扩展以处理复杂规则 ✅ 异步验证 - 提交前检查服务端可用性 ✅ 加载状态 - 处理过程中禁用提交按钮
身份验证与授权
✅ 服务端验证 - 切勿只信任客户端检查 ✅ 策略优先于角色 - 授权规则更加灵活 ✅ 使用声明存储详细信息 - 在声明中存储用户属性 ✅ 级联 AuthenticationState - 所有组件均可使用 ✅ 错误边界 - 优雅地处理错误
性能
✅ 在列表上使用 @key - 优化项目匹配 ✅ 重写 ShouldRender - 避免不必要的渲染 ✅ 大型列表使用虚拟化 - 仅渲染可见项目 ✅ JS 模块隔离 - 高效加载和缓存 JS 模块 ✅ WASM 的 AOT - 用于生产部署
常见故障排查
组件未重新渲染
- 原因:使用了修改而非重新赋值
- 解决方法:创建新的对象/集合:
items = items.Append(item).ToList() - 或者:手动调用
StateHasChanged()
参数未更新
- 原因:父组件未重新渲染或对象引用相同
- 解决方法:父组件必须重新渲染,并确保对象使用新引用
- 调试:检查 OnParametersSet 是否触发
JS 互操作错误
- 原因:脚本加载前就已调用,或函数名称错误
- 解决方法:使用
firstRender检查,并确认 JS 文件路径 - 模式:使用模块隔离:
await JS.InvokeAsync("import", "./script.js")
身份验证状态不可用
- 原因:未提供级联参数或存在时序问题
- 解决方法:确保已配置 AuthenticationStateProvider
- 模式:始终进行 null 检查,并在代码块中使用
await AuthStateTask!
大型列表性能问题
- 原因:在 DOM 中渲染了所有项目
- 解决方法:对于 1000 项以上的列表,使用 Virtualize 组件
- 替代方案:使用按钮分页或无限滚动
Blazor Server 连接问题
- 原因:SignalR 连接断开或存在配置问题
- 解决方法:实现重连 UI,并延长超时时间
- 配置:调整
CircuitOptions.DisconnectedCircuitRetentionPeriod
资源文件摘要
components-lifecycle.md
组件结构、生命周期方法、参数、级联值和组合模式的完整指南。理解 Blazor 组件基础知识的必读资料。
state-management-events.md
全面介绍本地状态和基于服务的状态、使用 EventCallback 处理事件、数据绑定模式和组件通信。构建交互式 UI 的核心资料。
routing-navigation.md
完整的路由参考,包括路由参数、约束、编程式导航、查询字符串和布局管理。多页面应用的必读资料。
forms-validation.md
完整的表单 API,涵盖 EditForm 组件、输入控件、DataAnnotations 验证、自定义验证器和表单模式。适用于数据录入场景。
authentication-authorization.md
Server 和 WASM 的完整身份验证设置,涵盖 AuthorizeView、策略、基于声明的访问控制以及登录/注销模式。安全应用的必备资料。
performance-advanced.md
性能优化技术,包括 ShouldRender、虚拟化、JavaScript 互操作模式、延迟加载和 WASM 最佳实践。生产应用的关键资料。
实施方法
实现 Blazor 功能时:
- 确定任务 - 对照上方的决策表
- 加载相关资源 - 阅读相应的 .md 文件
- 查找代码示例 - 在资源中搜索类似实现
- 根据具体情况调整 - 按照特定需求进行修改
- 全面测试 - 在托管模型中验证
- 参考故障排查 - 遇到问题时查阅资源
Next Steps
- New to Blazor? Start with components-lifecycle.md
- Building Data App? Move through: components → state → forms → validation
- Scaling Existing App? Focus on performance-advanced.md
- Adding Security? Follow authentication-authorization.md
Version: 2.0 - Modular Orchestration Pattern
Last Updated: December 4, 2025
Status: Production Ready ✅