Blazor Wasm:如何从继承组件更新基组件的属性?
解决Blazor WASM子组件更新基组件Text属性的问题
你当前的问题核心是:子组件里手动实例化了一个全新的BaseComp对象,它和子组件通过@inherits继承的基组件实例完全无关。你在OnInitialized中修改的Text属于子组件继承的基类实例,但页面显示的是新实例的默认值,所以才会出现不更新的情况。
解决方案:移除多余的<BaseComp/>标记
子组件继承BaseComp后,会自动包含基组件的所有UI和逻辑,不需要再手动引用<BaseComp/>。修改后的代码如下:
保留原BaseComp.razor不变
<h1>I'm base - @Text</h1> @code{ protected string Text {get; set;} = "Default"; }
修改后的ChildComponent.razor
@inherits BaseComp <h1>Hello, only child text!</h1> @code { protected override void OnInitialized() { Text = "new"; } }
页面显示结果
I'm base - new Hello, only child text!
原理说明
当Blazor组件使用@inherits继承父组件时,子组件会合并父组件的UI标记与逻辑。此时子组件和父组件属于同一个实例,修改Text属性会直接同步到父组件的UI上。而你之前添加的<BaseComp/>是独立的组件实例,它的Text始终是默认值,和子组件继承的实例没有关联。
如果需要在子组件中复用基组件的UI(多次渲染),可以将基组件改为接受参数的形式,通过传递参数更新Text,但在你的场景下,继承模式已经足够满足需求,移除多余的实例化代码即可解决问题。
内容的提问来源于stack exchange,提问作者Florent
相关产品推荐
相关产品推荐

