Blazor 当父组件更新时,我们如何呈现子组件?

Blazor 当父组件更新时,我们如何呈现子组件?,blazor,blazor-client-side,Blazor,Blazor Client Side,子组件基于作为参数传递给子组件的对象的一组属性构造字段。在下面的示例中,当父组件中的任何地址字段更改时,子组件如何动态呈现?谢谢你的建议 父组件使用子组件,如下所示,并传递参数parentObj 父组件: <Child ChildObj="@parentObj" /> 子组件: <div class="col-8 flex-wrap"> @Address </div> @code { [Parameter] public Person Chi

子组件基于作为参数传递给子组件的对象的一组属性构造字段。在下面的示例中,当父组件中的任何地址字段更改时,子组件如何动态呈现?谢谢你的建议

父组件使用子组件,如下所示,并传递参数
parentObj

父组件:

<Child ChildObj="@parentObj" />

子组件:

<div class="col-8 flex-wrap">
    @Address
</div>

@code {

[Parameter]
public Person ChildObj { get; set; }

public string Address { get; set; }


 protected override async Task OnInitializedAsync()
    {
        await Task.Run(() => { 
            if (ChildObj != null)
            {
                Address = ChildObj.Address1 + " " + ChildObj.Address2 + " " + ChildObj.City + " " + ChildObj.State + " " + ChildObj.Zip
            }
        });

    }
}

@地址
@代码{
[参数]
公共人物ChildObj{get;set;}
公共字符串地址{get;set;}
受保护的重写异步任务OnInitializedAsync()
{
等待任务。运行(()=>{
if(ChildObj!=null)
{
地址=ChildObj.Address1+“”+ChildObj.Address2+“”+ChildObj.City+“”+ChildObj.State+“”+ChildObj.Zip
}
});
}
}

这里的问题是,
OnInitializedAsync
仅在第一次在组件中设置参数时调用,您需要使用在以下情况下调用的参数:

OnParametersSetAsync或OnParametersSet被调用:

  • 在OnInitializedAsync或OnInitialized中初始化组件后
  • 当父组件重新渲染并提供: 只有至少一个参数已更改的已知基元不可变类型。 任何复杂类型的参数。框架无法知道复杂类型参数的值是否在内部发生了变化,因此它将参数集视为已更改

@地址
@代码{
[参数]
公共人物ChildObj{get;set;}
公共字符串地址{get;set;}
//使用OnParametersSet
受保护的覆盖无效OnParametersSet()
{
if(ChildObj!=null)
{
地址=ChildObj.Address1+“”+ChildObj.Address2+“”+ChildObj.City+“”+ChildObj.State+“”+ChildObj.Zip
}
}
}

设置地址调用后
InvokeAsync(statehaschange)
<div class="col-8 flex-wrap">
    @Address
</div>

@code {

    [Parameter]
    public Person ChildObj { get; set; }

    public string Address { get; set; }

    // using OnParametersSet
    protected override void OnParametersSet()
    {
        if (ChildObj != null)
        {
            Address = ChildObj.Address1 + " " + ChildObj.Address2 + " " + ChildObj.City + " " + ChildObj.State + " " + ChildObj.Zip
        }
    }
}