我有一个渲染模式为
InteractiveServer
的 .NET 8 blazor 应用程序。
在应用程序中,有一个带有
IsShown
参数的组件,if
语句使用该参数来呈现内容。如果我从主页更新参数,一切都会按预期进行。直接使用组件的引用更新属性没有任何效果。添加 StateHasChanged()
没有效果。
这是主页。第一个按钮有效。第二个和第三个没有。
<p><button @onclick="ShowUsingParameter">Show using parameter</button></p>
<p><button @onclick="ShowUsingProperty">Show using property</button></p>
<p><button @onclick="ShowUsingMethod">Show using method</button></p>
<ExampleComponent IsShown="isComponentShown" @ref="exampleComponent"></ExampleComponent>
@code {
private bool isComponentShown;
private ExampleComponent exampleComponent;
void ShowUsingParameter()
{
isComponentShown = true;
}
void ShowUsingProperty()
{
exampleComponent.IsShown = true;
StateHasChanged();
}
void ShowUsingMethod()
{
exampleComponent.Show();
}
}
这是组件:
@if (IsShown)
{
<h3>ExampleComponent</h3>
<button @onclick="() => IsShown = false">Hide</button>
}
@code {
[Parameter] public bool IsShown { get; set; }
public void Show()
{
IsShown = true;
}
}
你必须在组件内部调用StateHasChanged:
public void Show()
{
IsShown = true;
StateHasChanged();
}