防止在 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。