能否在Blazor组件类内部修改组件参数?
Blazor组件内部修改参数的问题
Blazor的组件参数和Vue的组件props概念类似,但在修改规则上有差异:虽然技术上允许在组件内部直接修改参数值(就像你代码里做的那样暂时能运行),但这是官方明确不推荐的反模式,会埋下状态不一致的隐患。
为什么不能这么做?
Blazor的组件参数本质是父组件传递给子组件的状态片段,子组件的参数值完全由父组件控制。如果子组件私自修改参数,父组件的对应状态并没有同步更新——当下一次父组件因为任何原因重新渲染时,会把参数值重新覆盖为父组件的当前状态,导致子组件的本地修改被冲掉,出现UI和状态不匹配的问题(比如你关闭弹窗后,父组件重新渲染时弹窗可能又自动显示)。
正确的做法
应该通过EventCallback通知父组件,由父组件负责修改对应的状态,再通过参数传递给子组件。修改你的代码如下:
protected async Task onPressDismissingButton() { // 移除直接修改参数的代码 await onPressDismissingButtonEventCallback.InvokeAsync(); }
父组件中维护状态并处理回调:
<ModalDialog mustDisplay="@_isModalVisible" onPressDismissingButtonEventCallback="@HideModal" title="示例弹窗" > 弹窗内容 </ModalDialog> @code { private bool _isModalVisible = true; private void HideModal() { _isModalVisible = false; } }
这样状态由父组件统一管理,子组件只负责触发事件,就能彻底避免状态不一致的问题。
内容的提问来源于stack exchange,提问作者Takeshi Tokugawa YD
相关产品推荐
相关产品推荐

