用途:创建或审查 Blazor 组件(.razor 文件),确保架构正确。适用于编写不涉及 JavaScript 互操作的 Blazor 组件。
主要能力与规则:数据通过 [Parameter] 向下传递,事件通过 EventCallback<T> 向上传递,不使用 Action/Func。不得修改 [Parameter] 属性,应在 OnParametersSet 中复制到私有字段。参数声明使用 [Parameter] public T Prop { get; set; },不使用 required 或 init(会触发 BL0007);必填参数用 [EditorRequired]。需处理加载、空、已加载、错误等全部状态,各用 @if/@else。循环中重复元素使用 @key 以高效 diff。集合参数使用 IReadOnlyList<T> 而非 IEnumerable<T>。
RenderFragment 与泛型:支持 ChildContent 与泛型模板 RowTemplate,泛型组件使用 @typeparam TItem。
文件模式:逻辑少于约 50 行时用单文件 .razor 加 @code 块;超过约 50 行时用 .razor 加 .razor.cs 分部类。
释放:组件拥有订阅、计时器或 CTS 时实现 IAsyncDisposable 而非 IDisposable;在 DisposeAsync 中取消订阅、取消 CTS、释放资源,不调用 StateHasChanged。
异步模式:每个异步操作都 await,不使用 .Result、.Wait()、Task.Run、ContinueWith、Thread.Start。防抖用 Task.Delay 加 CancellationTokenSource,取消旧 CTS、创建新 CTS、await 延迟后执行,不使用 System.Threading.Timer 或 System.Timers.Timer。轮询在 OnInitializedAsync 中循环并 await Task.Delay(interval, token)。外部事件(Action<T>)用 async void 处理器加 await InvokeAsync 更新状态并 StateHasChanged,异常经 DispatchExceptionAsync 处理,不使用 _ = InvokeAsync(...)。在 DisposeAsync 中取消 CTS,不捕获 ObjectDisposedException。
禁止事项:参数上使用 required/init;修改 [Parameter];事件用 Action/Func;防抖用 Task.Run/.Result/.Wait()/Timer;内联 style 属性(改用 CSS 类或 data-* 属性);catch { throw; };未被要求的 ARIA、包装 div 等镀金;_ = InvokeAsync(...) 吞异常。
限制:资料未提供安装命令、平台、收费或价格信息。