1. 程式人生 > 實用技巧 >Blazor入手教程(六)元件的生命週期

Blazor入手教程(六)元件的生命週期

Blazor入手教程(六)元件的生命週期

Blazor中元件的生命週期和vue十分相似:大體上說都是建立,渲染,然後監聽變數的改變重新渲染,最後銷燬,當然細節上還是各有不同的。

Vue元件的生命週期

Blazor元件的生命週期

Blazor元件生命週期

可覆寫方法

說明

無可重寫方法

建立元件例項

SetParametersAsync

每次引數注入時或在父級被修改時呼叫。即從父級傳過來的引數,或者祖先級傳過來的級聯引數,或者路由引數。在初始化之前,接受一個ParameterView型別引數,可列舉。

OnInitialized/OnInitializedAsync

初始化,引數注入完成後

OnParametersSet/OnParametersSetAsync

每次引數設定之後呼叫,完成之後開始渲染元件,如果是非同步則等待完成後渲染

OnAfterRender /OnAfterRenderAsync

每次渲染結束後呼叫,接受一個引數firstRender表示是否是首次渲染,只有在首次渲染是是true,其餘均是false。

ShouldRender

除了首次每次渲染完成後呼叫,返回一個bool值,表示是否進行渲染

每次渲染完成後呼叫,接

只有OnInitialized/OnInitializedAsync是隻呼叫一次的,其他的都有可能呼叫多次。

框架裡面的生命週期本來是沒有銷燬的。但是你可以通過元件繼承IDispose介面來自定義元件的釋放。

單個頁面的生命週期

嵌入子元件時父元件和子元件Modal的各自的生命週期

Blazor頁面可以覆寫這些方法。

@page "/lifecycle" 

<h3>生命週期</h3>

@code {


    public override Task SetParametersAsync(ParameterView parameters)
    {

        Console.WriteLine(
"SetParametersAsync ParameterView=" + parameters); foreach (var item in parameters) { Console.WriteLine("parameters item.Name=" + item.Name + ",item.Value=" + item.Value); } return base.SetParametersAsync(parameters); } protected override void OnInitialized() { Console.WriteLine("OnInitialized"); base.OnInitialized(); } protected override Task OnInitializedAsync() { Console.WriteLine("OnInitializedAsync"); return base.OnInitializedAsync(); } protected override void OnAfterRender(bool firstRender) { Console.WriteLine("OnAfterRender firstRender=" + firstRender); base.OnAfterRender(firstRender); } protected override Task OnAfterRenderAsync(bool firstRender) { Console.WriteLine("OnAfterRenderAsync firstRender=" + firstRender); return base.OnAfterRenderAsync(firstRender); } protected override void OnParametersSet() { Console.WriteLine("OnParametersSet"); base.OnParametersSet(); } protected override Task OnParametersSetAsync() { Console.WriteLine("OnParametersSetAsync"); return base.OnParametersSetAsync(); } // // 摘要: // Returns a flag to indicate whether the component should render. protected override bool ShouldRender() { Console.WriteLine("ShouldRender"); return base.ShouldRender(); } }