Blazor入手教程(六)元件的生命週期
阿新 • • 發佈:2020-11-23
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(); } }