【发布时间】:2021-06-19 21:36:17
【问题描述】:
我有一个类似的组件,我希望在第一次渲染时保存 InnerComponent 的实例,并且每次都渲染相同的实例而不重新实例化它。
@if(isVisible)
{
<InnerComponent @ref="@_InnerComponent" @key="@("InnerComponentKey")">
@ChildContent
</InnerComponent>
}
@code{
[Parameter] public InnerComponent _InnerComponent { get; set; }
private bool IsVisible { get; set; }
}
当内部组件可见时,用户可以操纵其状态。
但是,如果 IsVisible 设置为 false 然后再次设置为 true,则内部组件将重新渲染以覆盖 _InnerComponent,因此我们将无法跟踪用户对 InnerComponent 实例所做的更改。
添加@key 似乎也无助于保留实例。它只是被重新渲染和覆盖:/ 我敢肯定,我在两次渲染时都给它提供了相同的键,但我不知道如何检查它所比较的键。
如果可以渲染组件实例,我可以执行以下操作,但我似乎找不到方法。
@if(isVisible)
{
@if(_InnerComponent == null)
{
<InnerComponent @ref="@_InnerComponent" @key="@("InnerComponentKey")">
@ChildContent
</InnerComponent>
}
else
{
@_InnerComponent.Render()
}
}
我对我的问题提出批评,因为我没有问过很多问题:)
提前致谢!
简化示例:
假设我们有以下组件,我将调用 `CounterContainer` ,其中 `<Counter>` 是默认 Blazor 项目模板中的计数器组件。@if(CounterIsVisible)
{
<Counter @ref="@_Counter" @key="@("CounterKey")" />
}
<button @onclick="() => CounterIsVisible = !CounterIsVisible">
Show/Hide counter
</button>
@code{
[Parameter] public Counter _Counter { get; set; }
private bool CounterIsVisible { get; set; } = true;
}
我想保存_Counter 实例,这样我就可以看到我计数的正确_Counter.currentCount。我可以使用this article 中的方法保存它,但我发现它们都不实用,因为
- 我正在构建的组件拥有比单个变量更多的数据
- 我只需要
CounterContainer存在且仅用于可视化的数据 - 对于我的用例来说太复杂了
我已经存储了 Counter 引用。我只想查看它而不是重新实例化它并覆盖整个内容。
希望这让它更清楚一点(:
【问题讨论】:
标签: c# asp.net-core blazor