其他
在 .NET 项目中进行 Blazor…
适用于 Blazor Server 或 Blazor WebAssembly 项目的组件开发、状态管理、性能优化、错误处理、测试与认证配置。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 35/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 38/100 ×0.15
适用场景
在 .NET 项目中进行 Blazor 特定
解决思路
- 创建小而专注的组件。
- 用组件参数接收输入。
- 用 EventCallback 输出/触发事件。
- 实现 IDisposable 进行清理。
- 谨慎使用级联参数。
- 组件结构:用 `@page "/users/{Id:int}"` 定义路由,用 `@inject IUserService UserService` 注入服务,用 `[Parameter] public int Id { get; set; }` 接收参数,在 `OnInitializedAsync` 中通过服务加载数据。
- 生命周期方法 `OnInitialized`/`OnInitializedAsync`:执行初始设置。
- 生命周期方法 `OnParametersSet`/`OnParametersSetAsync`:在参数变化时执行。
- 生命周期方法 `OnAfterRender`/`OnAfterRenderAsync`:在 DOM 更新后执行。
- 生命周期方法 `Dispose`:清理资源。
- 用 `OnInitializedAsync` 加载数据。
- 在 `OnAfterRenderAsync` 中检查 `firstRender`。
- 释放订阅和计时器。
- 避免长时间运行的同步代码。
- 单向绑定:用 `@message` 显示值,用 `value="@inputValue"` 绑定输入值。
- 双向绑定:用 `@bind="inputValue"`;需要实时绑定时用 `@bind="inputValue" @bind:event="oninput"`。
- 事件处理:用 `@onclick="HandleClick"` 调用处理器;用 `@onclick="() => HandleClickWithParam(id)"` 传参;用 `@onclick="HandleClickAsync"` 调用异步处理器。
- 防止不必要渲染:对列表项使用 `@key`。
- 在合适时实现 `ShouldRender()`。
- 谨慎使用 `StateHasChanged()`。
- 避免在循环中使用内联事件处理器。
- 虚拟化:用 `<Virtualize Items="@items" Context="item">` 搭配 `<ItemContent>` 渲染大列表。
- 组件状态:用私有字段保存组件状态。
- 状态在外部变化时调用 `StateHasChanged()`。
- 用 `InvokeAsync` 进行线程安全更新。
- 级联参数:用 `<CascadingValue Value="@currentTheme">` 包裹子组件;子组件用 `[CascadingParameter] public Theme CurrentTheme { get; set; }` 接收。
- 状态容器:创建可注入的状态服务。
- 用事件进行状态变化通知。
- 复杂状态管理考虑 Fluxor。
- Blazor Server:状态在服务器;通过 SignalR 实时连接;初始加载更快;需要稳定连接;更适合内部应用。
- Blazor WebAssembly:完全在浏览器中运行;初始下载更大;可离线(支持 PWA);每用户无服务器资源;更适合公开应用。
- HTTP 客户端:`@inject HttpClient Http`;用 `Http.GetFromJsonAsync<List<User>>("api/users")` 加载数据。
- API 错误处理:用 try/catch 捕获 `HttpRequestException`,并设置错误消息(如 `errorMessage = "Failed to load users"`)。
- 错误边界:用 `<ErrorBoundary>` 包裹 `<ChildContent>` 中的风险组件,用 `<ErrorContent Context="ex">` 显示错误信息。
- 全局错误处理:实现 `IErrorBoundary` 进行自定义处理。
- 将错误记录到服务器。
- 显示用户友好的错误消息。
- bUnit 测试:用 `TestContext` 渲染组件,例如 `ctx.RenderComponent<Counter>()`。
- bUnit 测试:用 `Find` 查找元素并 `MarkupMatches` 断言标记。
- bUnit 测试:用 `Click` 触发交互并验证更新。
- 认证设置:使用 `AuthenticationStateProvider`。
- 使用 `AuthorizeView` 控制条件 UI。
- 在页面上使用 `[Authorize]` 特性。
- 为 JWT 实现自定义认证状态提供程序。
- AuthorizeView:在 `<Authorized>` 中显示已认证内容(如 `Welcome, @context.User.Identity?.Name!`),在 `<NotAuthorized>` 中提示登录。
- 性能提示:对动态列表使用 `@key`。
- 对大列表实现虚拟化。
- 用 `@if` 懒加载组件。
- 尽量减少 JavaScript interop 调用。
- 在 .NET 8+ 中使用流式渲染。
适用边界 · 注意事项
- 不适用于非 Blazor/.NET 项目。
- 极简静态页面或一次性脚本无需引入这些模式。
- 若无法使用 .NET/Blazor 工具链,则不能直接应用这些做法。