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; } 用于接收 <child><p>Hello</p></child>中的内容
[Parameter] public EventCallback<string> OnClick { get; set; }</string> 接收回调方法,触发用 await OnClick.InvokeAsync("data")
多个 RenderFragment参数可配合命名模板使用(如
HeaderTemplate、
FooterTemplate)
参数变更响应与生命周期配合
参数更新会触发组件重新渲染,但若需在参数变化时执行逻辑,应重写
SetParametersAsync或监听
OnParametersSet:
OnParametersSet在每次参数更新后、首次渲染及后续重渲染前调用 若需异步加载数据,应在
OnParametersSetAsync中处理,并调用
StateHasChanged()(必要时) 避免在
SetParametersAsync中直接修改
Parameters,应先调用
base.SetParametersAsync(parameters)
基本上就这些。掌握
[Parameter]的边界和配合时机,就能写出清晰、健壮、易维护的 Blazor 组件。
