【发布时间】:2021-01-27 09:25:50
【问题描述】:
我似乎无法从另一个组件的操作中重新渲染剃须刀组件。例如:
假设我们有一个组件库“ComponentVariables”,其中定义了一个变量“buttonClickCount”来跟踪按钮被点击的次数,以及增加变量的方法。
组件变量.cs
sing Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Hosting;
namespace WebApplication2.Components
{
public class ComponentVariables : ComponentBase
{
[Parameter]
public int buttonClickCount { get; set; }
public ComponentVariables() { }
protected override void OnInitialized()
{
buttonClickCount = 0;
}
public void clickCounter()
{
buttonClickCount++;
StateHasChanged();
}
}
}
然后它被 _Imports.razor 中的所有组件以@inherits ComponentVariables 继承
home组件有如下代码
Home.razor
<div class="row">
<strong>@buttonClickCount</strong>
<Clicker/>
</div>
然后在 Clicker.razor 组件中创建按钮。以及引用组件库中方法的 onclick。和一个包含计数的 div(也来自组件库)。
Clicker.razor
<div>
<button @onclick="clickCounter">Click Me</button>
</div>
<div>@buttonClickCount</div>
@code
{
}
就像现在一样,home.razor 和 clicker.razor 都在 ComponentVariables.cs 中使用相同的变量来显示一个值。但是,当我单击时,只有 Clicker 组件会重新呈现。即 home 始终显示 0,而 clicker 会随着您的点击而增加。
对此的任何帮助将不胜感激。
【问题讨论】:
-
你使用了继承。因此,看起来您操作相同的变量是因为它们具有名称,但实际上,它们都是具有唯一值的唯一实例。也许,你可以描述一下你想用这种方法实现什么?
-
我开始更多地使用调试器,并注意到每个剃须刀组件都调用了基础。这意味着我怀疑你是对的。那么在这种情况下,我将如何在所有组件中使用引用相同的变量,并使它们都随着对所述变量的更新而动态变化?
-
非常感谢!我刚刚通读了这两个链接。它们看起来很有帮助,尤其是 appstate 之一。不过,后续问题是否可以根据更改的变量将重新渲染限制为特定组件?因为这对我的情况来说是最重要的部分。
-
@VictoryObot,事件或代表呢?
<Clicker onClick="InvokeAsync(StateHasChanged)" />
标签: asp.net-core razor blazor