防止在 StateHasChanged 后重新加载 ChildComponent?
Prevent ChildComponent to be reloaded after StateHasChanged?
我有一个内部有不同组件的组件,它们具有父组件给定的不同参数。例如,在一个组件中是一个布尔值。它从父组件获取值 (true) 作为参数。
如果我更改子组件内的布尔值(为 false),然后在触发 StateHasChanged 的父组件中发生某些事情,子组件将使用父组件的 bool 参数进行刷新(true)。
有什么好的方法可以防止这种情况发生,从而使 bool 值保持不变?
或者我是否必须做类似回调的事情,以便每次当子项中的布尔值发生变化时,父项中的布尔值也会发生变化?如果我必须这样做,下面的方法是正确的,还是有更简单的方法?
Parent
<TestComponent boolChanged="this.ChangeBool" MyBool="this.myBool"></TestComponent>
@code {
private bool myBool = true;
private void ChangeBool(bool change)
{
this.myBool = change;
}
}
Child
@code {
[Parameter]
public bool MyBool { get; set; }
[Parameter]
public EventCallback<bool> boolChanged { get; set; }
private async Task SetBoolFalse()
{
this.MyBool = false;
await this.boolChanged.InvokeAsync(this.MyBool);
}
}
如果有多个参数,工作量似乎很大。
子组件 (TestComponent)
@code {
private bool myBool;
[Parameter]
public bool MyBool { get; set; }
[Parameter]
public EventCallback<bool> MyBoolChanged { get; set; }
protected override void OnParametersSet()
{
myBool = MyBool;
}
private async Task SetBoolFalse()
{
myBool = false;
await MyBoolChanged.InvokeAsync(myBool);
}
}
父组件
<div>@myBool.ToString()</div>
<TestComponent @bind-Value="myBool"/>
@code {
private bool myBool = true;
}
注意:永远不要改变参数的状态。参数属性仅用于在组件之间流动数据。您应该定义一个局部变量 (myBool) 来维护您的状态。请注意,我在 OnParametersSet 生命周期方法中使用 MyBool 参数 属性 的值初始化变量 myBool。
我有一个内部有不同组件的组件,它们具有父组件给定的不同参数。例如,在一个组件中是一个布尔值。它从父组件获取值 (true) 作为参数。 如果我更改子组件内的布尔值(为 false),然后在触发 StateHasChanged 的父组件中发生某些事情,子组件将使用父组件的 bool 参数进行刷新(true)。
有什么好的方法可以防止这种情况发生,从而使 bool 值保持不变? 或者我是否必须做类似回调的事情,以便每次当子项中的布尔值发生变化时,父项中的布尔值也会发生变化?如果我必须这样做,下面的方法是正确的,还是有更简单的方法?
Parent
<TestComponent boolChanged="this.ChangeBool" MyBool="this.myBool"></TestComponent>
@code {
private bool myBool = true;
private void ChangeBool(bool change)
{
this.myBool = change;
}
}
Child
@code {
[Parameter]
public bool MyBool { get; set; }
[Parameter]
public EventCallback<bool> boolChanged { get; set; }
private async Task SetBoolFalse()
{
this.MyBool = false;
await this.boolChanged.InvokeAsync(this.MyBool);
}
}
如果有多个参数,工作量似乎很大。
子组件 (TestComponent)
@code {
private bool myBool;
[Parameter]
public bool MyBool { get; set; }
[Parameter]
public EventCallback<bool> MyBoolChanged { get; set; }
protected override void OnParametersSet()
{
myBool = MyBool;
}
private async Task SetBoolFalse()
{
myBool = false;
await MyBoolChanged.InvokeAsync(myBool);
}
}
父组件
<div>@myBool.ToString()</div>
<TestComponent @bind-Value="myBool"/>
@code {
private bool myBool = true;
}
注意:永远不要改变参数的状态。参数属性仅用于在组件之间流动数据。您应该定义一个局部变量 (myBool) 来维护您的状态。请注意,我在 OnParametersSet 生命周期方法中使用 MyBool 参数 属性 的值初始化变量 myBool。