Blazor 组件参数传递 [Parameter] 属性用法

[Parameter] 是 Blazor 组件接收外部输入的核心机制,要求 public、可写、非 static/readonly;支持简单类型、RenderFragment、EventCallback 等;可用 Mandatory 控制必需性,配合 OnParametersSet 或 SetParametersAsync 响应变更。

Blazor 中的 [Parameter] 是定义组件可接收外部输入的核心机制,它让组件具备复用性和灵活性。参数必须是 public、可写(即有 set 访问器)的属性,且不能是 static 或 readonly。

基础用法:接收简单类型参数

在子组件中用 [Parameter] 标记属性,父组件通过 HTML 属性语法传值:

  • 支持内置类型如 stringintboolDateTime
  • 属性名默认对应标签中的小驼峰命名(如 UserNameuser-name),也可用 [Parameter(Name = "custom-name")] 显式指定
  • 未传值时,引用类型为 null,值类型为默认值(如 int 是 0)

必需参数与默认值控制

[Parameter(Mandatory = true)] 表示该参数必须由父组件提供,否则运行时报错;若需自定义默认行为,可在 SetParametersAsyncOnInitialized 中补全:

  • Mandatory = true 仅在编译期不检查,错误发生在组件渲染时
  • 不加 Mandatory 时,建议在 OnInitialized 中判断是否为默认值并做兜底处理
  • 避免在 get 中直接返回默认值(如 => _value ?? "default"),因为无法触发重渲染

接收组件内容(RenderFragment)和事件回调

[Parameter] 还能接收 UI 片段或委托,实现高级封装:

  • [Parameter] public RenderFragment ChildContent { get; set; } 用于接收

    Hello

    中的内容
  • [Parameter] public EventCallback OnClick { get; set; } 接收回调方法,触发用 await OnClick.InvokeAsync("data")
  • 多个 RenderFragment 参数可配合命名模板使用(如 HeaderTemplateFooterTemplate

参数变更响应与生命周期配合

参数更新会触发组件重新渲染,但若需在参数变化时执行逻辑,应重写 SetParametersAsync 或监听 OnParametersSet

  • OnParametersSet 在每次参数更新后、首次渲染及后续重渲染前调用
  • 若需异步加载数据,应在 OnParametersSetAsync 中处理,并调用 StateHasChanged()(必要时)
  • 避免在 SetParametersAsync 中直接修改 Parameters,应先调用 base.SetParametersAsync(parameters)

基本上就这些。掌握 [Parameter] 的边界和配合时机,就能写出清晰、健壮、易维护的 Blazor 组件。