构造与依赖注入阶段
组件实例化时最先执行构造函数,此时参数尚未传入,服务也未注入。紧接着是依赖注入——如果组件声明了 @inject 或构造函数注入的服务,系统会在此阶段完成赋值。注意:此时不能访问 Parameters 或 RenderTree,也不推荐做异步初始化。
初始化与参数设置阶段
分两轮进行:
OnInitialized / OnInitializedAsync:在首次接收参数前调用,适合一次性初始化(如拉取页面级数据)。Async 版本更常用,但需注意它不等待 DOM 渲染。 OnParametersSet / OnParametersSetAsync:每次父组件传参变更或路由参数更新时触发,适合响应式逻辑(如根据 ID 重新加载详情)。渲染与更新控制阶段
Blazor 在每次可能重绘前都会介入:
ShouldRender:返回 false 可跳过本次渲染,常用于性能优化(比如只在数据真正变化时才刷新)。 OnAfterRender / OnAfterRenderAsync:DOM 已更新完毕后调用,可安全操作 DOM、调用 JS 互操作(如聚焦输入框、初始化第三方图表库)。销毁与资源清理阶段
组件从 UI 中移除时触发:
Dispose / DisposeAsync:必须在这里释放非托管资源(如取消订阅事件、关闭定时器、释放 JS 引用)。若用了 IAsyncDisposable,优先实现 DisposeAsync。 基本上就这些。实际开发中,90% 的场景集中在 OnInitializedAsync、OnParametersSetAsync 和 OnAfterRenderAsync 这三个异步方法上。记住:**不要在 OnInitializedAsync 里操作 DOM,在 OnAfterRenderAsync 里避免无条件触发状态变更(否则可能造成循环渲染)**。