Blazor 父子组件数据传递和事件回调方法
技术百科
幻夢星雲
发布时间:2026-01-14
浏览: 次 父子组件通信核心为三机制:①[Parameter]单向传值;②@bind+EventCallback实现双向绑定;③EventCallback通知父组件;参数变更需在OnParametersSetAsync中响应,跨层级用CascadingParameter。
父子组件数据传递:使用 [Parameter] 和 @bind
父组件向子组件传值,最常用的是 [Parameter] 特性。子组件定义一个 public 属性并标记为 [Parameter],父组件在引用子组件时通过属性名绑定值即可。
例如子组件 Child.razor 中:
[Parameter] public int Count { get; set; }
父组件中调用:
若需双向绑定(比如子组件修改后同步回父组件),可用 @bind 语法。此时子组件需同时提供参数和对应的 Changed 事件回调(类型为 EventCallback)。
- 子组件声明:
[Parameter] public string Value { get; set; }
[Parameter] public EventCallbackValueChanged { get; set; } - 在子组件内触发更新:
await ValueChanged.InvokeAsync(newValue); - 父组件使用:
(Blazor 自动解析为 Value + ValueChanged 绑定)
子组件向父组件通信:通过 EventCallback 回调
子组件不能直接修改父组件状态,但可通过 EventCallback 主动“通知”父组件发生了什么。这是 Blazor 推荐的解耦方式。
典型场景:子组件有个按钮,点击后希望父组件刷新列表或显示提示。
- 子组件定义回调参数:
[Parameter] public EventCallback OnClick { get; set; }
// 或带参:
[Parameter] public EventCallbackOnItemSelect { get; set; } - 在子组件事件中触发:
await OnClick.InvokeAsync();
// 或带参调用:
await OnItemSelect.InvokeAsync("item1"); - 父组件接收并处理:
并在 @code 块中定义对应方法。
避免常见陷阱:参数更新与生命周期配合
Parameter 属性变更不会自动触发组件重绘逻辑,除非你显式响应。Blazor 在参数更新后会调用 OnParametersSet(或异步版 OnParametersSetAsync),这是执行副作用(如重新加载数据)的合适时机。
- 不要在 Set 访问器里做异步操作(C# 不支持 async setter)
- 需要根据参数变化发起 HTTP 请求?放在 OnParametersSetAsync 里
- 注意:首次渲染和每次参数变更都会触发该方法,必要时加条件判断(如对比新旧
值)
进阶技巧:使用 CascadingParameter 实现跨层级传递
当多个嵌套层级(如父→子→孙)都需要访问同一数据或服务时,重复通过 [Parameter] 逐层透传很繁琐。这时可结合 CascadingParameter 和 CascadingValue。
- 父组件包裹内容区域:
- 子/孙组件声明接收:
[CascadingParameter] public string ThemeColor { get; set; } - 适合传递主题、用户上下文、全局配置等不频繁变更的数据
基本上就这些。核心就三点:Parameter 传入、EventCallback 传出、CascadingParameter 跨层共享——不复杂但容易忽略生命周期钩子的使用时机。
# ai
# 的是
# 放在
# 这是
# 多个
# 有个
# 进阶
# 并在
# 首次
# 绑定
# public
# http
# String
# int
# c#
# 异步
# 事件
# 回调
# cad
# count
# 访问器
# 重绘
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- Win10怎么卸载爱奇艺_Win10彻底卸载爱奇艺
- Win11如何设置省电模式 Win11开启电池节电
- Windows10如何删除恢复分区_Win10 D
- 如何在Golang中使用container/hea
- Win11怎么用设置清理回收站_Win11设置清理
- C#怎么创建控制台应用 C# Console Ap
- PowerShell怎么创建复杂的XML结构
- Win11怎么设置默认浏览器Chrome_Wind
- php本地部署后数据库连接报错_1045acces
- Win11怎么查看硬盘型号_Windows 11检
- 如何在 Go 中调用动态链接库(.so)中的函数
- 如何在 Go 应用中实现自动错误恢复与进程重启机制
- php能控制zigbee模块吗_php通过串口与c
- Django 测试数据库表缺失与字段未创建问题的完
- Windows10如何删除Windows.old_
- Win10怎么创建桌面快捷方式 Win10为应用创
- Win11怎么设置虚拟内存最佳大小_Windows
- Go语言中slice追加操作的底层共享机制解析
- Win11如何卸载OneDrive_Win11卸载
- Python项目回滚策略_发布安全说明【指导】
- 如何使用 Selenium 正确获取篮球参考网站球
- Python lxml的etree和Element
- 如何将文本文件中的竖排字符串转换为横排字符串
- Win11开机自检怎么关闭_跳过Win11开机磁盘
- Win11怎么设置屏保时间_调整Win11屏幕保护
- Win11怎样安装剪映专业版_Win11安装剪映教
- Win11屏幕亮度突然变暗怎么解决_自动变暗问题处
- Win11 explorer.exe频繁崩溃_修复
- 小程序里php怎么变mp4_小程序调用php生成m
- 跨文件调用类方法怎么用_php作用域操作符与自动加
- C++中的协变与逆变是什么?C++函数指针与返回类
- php485函数执行慢怎么优化_php485性能提
- Mac如何备份到iCloud_Mac桌面与文稿文件
- 如何优化Golang Web性能_Golang H
- Win11应用商店下载慢怎么办 Win11更改DN
- Windows10如何查看蓝屏日志_Win10使用
- Windows系统被恶意软件破坏后的恢复策略_错误
- Win11怎么设置默认邮件客户端 Win11修改M
- Win11麦克风没声音怎么设置_Win11麦克风权
- Win11怎么关闭任务栏小图标_Windows11
- VSC怎样在Linux运行PHP_Ubuntu系统
- 如何在 Go 中正确反序列化多个同级 XML 元素
- Win11如何更新显卡驱动 Win11检查和安装设
- Windows10系统怎么查看CPU温度_Win1
- Win11快速助手怎么用_Win11远程协助连接教
- Win11如何设置自动关机 Win11定时关机命令
- Win11怎么关闭自动调节亮度_Windows11
- LINUX怎么查看进程_LINUX ps命令查看运
- 如何在 Python 测试中动态配置 @backo
- c++输入输出流 c++ cin与cout格式化输

值)
QQ客服