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();
    }
}

 

posted @ 2020-11-23 15:54  小小爵  阅读(3715)  评论(0编辑  收藏  举报