Blazor 元件之間的參數傳遞與事件處理 (Components Parameters And EventCallBack)
2024-01-05
筆記如何處理 Blazor 父子元件之間參數傳遞與事件處理,讓演算法行為可以封裝在子元件當中達成重複使用的效益 😎
說明
ParentComponent.cs
@page "/page1"
<div>MyProperty @MyProperty</div>
<ClickButton CallbackMethod="UpdateProperty" CurrentValue="MyProperty" BtnDisplay="ChildComponent" />
@code {
    private int MyProperty { get; set; }
    private void RandomValue()
    {
        var rand = new Random();
        MyProperty = rand.Next(1, 100);
    }
    private void UpdateProperty(int value)
    {
        MyProperty = value;
    }
}
ChildComponent.cs
<div class="btn @BtnColor" @onclick="Callback">@BtnDisplay</div>
@code {
    [Parameter]
    public string? BtnDisplay { get; set; }
    [Parameter]
    public string? BtnColor { get; set; } = "btn-outline-info";
    [Parameter]
    public int CurrentValue { get; set; }
    [Parameter]
    public EventCallback<int> CallbackMethod { get; set; }
    private int BtnAlgorithm()
    {
        return CurrentValue + 1;
    }
    private async Task Callback()
    {
        CurrentValue = BtnAlgorithm();
        await CallbackMethod.InvokeAsync(CurrentValue);
    }
}
如果要進一步有多個子元件,子元件本身有相同的 HTML Template 但差別的演算法,可以藉由 @inherits 的方式達成 😀
<!-- BaseComponent.razor -->
<h3>Base Component</h3>
<p>This is the base component.</p>
<!-- DerivedComponent.razor -->
@inherits BaseComponent
<h3>Derived Component</h3>
<p>This is the derived component.</p>
<!-- You can add additional content or customize behavior here. -->