Blazor同级组件能否直接访问彼此数据?方案选择分享
Blazor组件间数据传递问题
我把Razor页面拆分成了这样:
@page "/Manager/ListCampaigns" <OrganizationFilter SearchAsync="@SearchCampaigns"></OrganizationFilter> <OrganizationGrid ListOrganizations="@MatchingCampaigns"></OrganizationGrid>
我的疑问是:OrganizationFilter组件持有OrganizationGrid.ListOrganizations需要的数据,能不能直接写成下面这样实现等效效果?
<OrganizationGrid ListOrganizations="@OrganizationFilter.MatchingCampaigns"></OrganizationGrid>
还是必须通过bind-MatchingCampaigns先把数据传递给父组件,再由父组件传给OrganizationGrid?
更新
我收到了@MrCakaShaunCurtis和@BrianParker的优质解答,作为Blazor新手,我认可他们的专业深度,但最终选择了第三种方案。三种可行方案如下:
[CascadingParameter]方案:父组件声明级联参数,所有子组件都能访问。当OrganizationFilter修改参数后,OrganizationGrid会感知到变化并重新渲染,方案简洁易用。- 作用域服务方案:通过DI注入一个包含
DataChanged事件处理程序的对象,OrganizationFilter调用委托后,OrganizationGrid接收消息触发更新。基于消息传递,但实现相对复杂。 - 父组件事件链式传递方案:父组件公开
DataChanged()事件,OrganizationFilter调用该事件后,父组件触发OrganizationGrid的对应方法完成更新,实现链式消息传递,逻辑简洁清晰。
选择第三种方案的原因:方案2在当前场景下过于复杂;方案1是Blazor的核心功能,但相关概念对我来说还比较陌生。不过我计划在1.1版本改用[CascadingParameter]方案,以此掌握这个基础用法。
感谢@MrCakaShaunCurtis和@BrianParker,他们不仅提供了解决方案,更让我对Blazor有了更深入的理解。
内容的提问来源于stack exchange,提问作者David Thielen
相关产品推荐
相关产品推荐

