[Parameter] 是 Blazor 组件接收外部输入的核心机制,要求 public、可写、非 static/readonly;支持简单类型、RenderFragment、EventCallback 等;可用 Mandatory 控制必需性,配合 OnParametersSet 或 SetParametersAsync 响应变更。
![blazor 组件参数传递 [parameter] 属性用法](https://img.php.cn/upload/article/001/221/864/176706563286098.png)
Blazor 中的 [Parameter] 是定义组件可接收外部输入的核心机制,它让组件具备复用性和灵活性。参数必须是 public、可写(即有 set 访问器)的属性,且不能是 static 或 readonly。
基础用法:接收简单类型参数
在子组件中用 [Parameter] 标记属性,父组件通过 HTML 属性语法传值:
- 支持内置类型如
string、int、bool、DateTime等 - 属性名默认对应标签中的小驼峰命名(如
UserName→user-name),也可用[Parameter(Name = "custom-name")]显式指定 - 未传值时,引用类型为
null,值类型为默认值(如int是 0)
必需参数与默认值控制
用 [Parameter(Mandatory = true)] 表示该参数必须由父组件提供,否则运行时报错;若需自定义默认行为,可在 SetParametersAsync 或 OnInitialized 中补全:
-
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参数可配合命名模板使用(如HeaderTemplate、FooterTemplate)
参数变更响应与生命周期配合
参数更新会触发组件重新渲染,但若需在参数变化时执行逻辑,应重写 SetParametersAsync 或监听 OnParametersSet:
-
OnParametersSet在每次参数更新后、首次渲染及后续重渲染前调用 - 若需异步加载数据,应在
OnParametersSetAsync中处理,并调用StateHasChanged()(必要时) - 避免在
SetParametersAsync中直接修改Parameters,应先调用base.SetParametersAsync(parameters)
基本上就这些。掌握 [Parameter] 的边界和配合时机,就能写出清晰、健壮、易维护的 Blazor 组件。










