mcpField
B
blazor-expert

blazor-expert

github.com/markpitt开发24688 次安装36 周前更新
代码仓库

关于 blazor-expert

blazor-expert 是面向 Blazor 开发的分模块指导技能,按任务引导查阅相应资源文件。内容覆盖组件、状态、路由、表单、安全与性能,并提供工作流和故障排查建议。

主要功能

  1. 01按任务选择指导资源
  2. 02组件与生命周期参考
  3. 03状态管理和事件处理
  4. 04路由、表单与权限指南
  5. 05性能优化与故障排查

适用场景

  1. 01构建可复用的 Blazor 组件
  2. 02实现表单和输入验证
  3. 03设置身份验证及受保护页面
  4. 04排查渲染或连接问题

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/markpitt/claude-skills --skill blazor-expert

安装后在 Claude Code 中输入/blazor-expert确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

resources/
authentication-authorization.md
components-lifecycle.md
forms-validation.md
performance-advanced.md
routing-navigation.md
state-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.mdEditForm、输入组件、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:构建数据录入组件
  1. 阅读 components-lifecycle.md - 组件结构部分
  2. 阅读 state-management-events.md - EventCallback 模式
  3. 阅读 forms-validation.md - EditForm 组件
  4. 组合:创建带参数的组件 → 捕获用户输入 → 验证 → 通知父组件
场景 2:实现用户身份验证和受保护页面
  1. 阅读 authentication-authorization.md - 设置部分
  2. 阅读 routing-navigation.md - 布局部分
  3. 阅读 authentication-authorization.md - AuthorizeView 部分
  4. 组合:配置身份验证 → 创建登录页面 → 保护路由 → 在组件中检查身份验证
场景 3:构建带搜索/筛选功能的交互式列表
  1. 阅读 routing-navigation.md——查询字符串部分
  2. 阅读 state-management-events.md——数据绑定部分
  3. 阅读 performance-advanced.md——虚拟化部分
  4. 组合使用:捕获搜索输入 → 更新 URL 查询参数 → 获取筛选后的数据 → 数据量大时进行虚拟化
场景 4:优化现有应用的性能
  1. 阅读 performance-advanced.md——所有部分
  2. 找出性能瓶颈:
    • 不必要的重新渲染?→ 重写 ShouldRender,使用 @key 指令
    • 列表过大?→ 虚拟化
    • JS 延迟?→ 模块隔离模式
  3. 应用资源中介绍的针对性优化

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 功能时:

  1. 确定任务 - 对照上方的决策表
  2. 加载相关资源 - 阅读相应的 .md 文件
  3. 查找代码示例 - 在资源中搜索类似实现
  4. 根据具体情况调整 - 按照特定需求进行修改
  5. 全面测试 - 在托管模型中验证
  6. 参考故障排查 - 遇到问题时查阅资源

Next Steps


Version: 2.0 - Modular Orchestration Pattern
Last Updated: December 4, 2025
Status: Production Ready ✅

评论

支持 Markdown