Blazor:组件生命周期和刷新机制详解

前言

对于组件化来说,生命周期是必须掌握的知识,只有掌握了生命周期才能更好的去设置数据的变化。

Blazor 生命周期 微软文档

生命周期

子组件设置

我们设置了一些函数,让监听这些生命周期事件更新。

 private void Print(string str)
 {
    
    
     System.Console.WriteLine($"子组件,{
      
      str}");
 }
 protected override void OnInitialized()
 {
    
    
     Print($"OnInitialized!");

     base.OnInitialized();
 }


 protected override void OnAfterRender(bool firstRender)
 {
    
    
     Print($"OnAfterRender,firstRender:{
      
      firstRender}");
     base.OnAfterRender(firstRender);
 }

 protected override void OnParametersSet()
 {
    
    
     Print($"OnParametersSet!");
     base.OnParametersSet();
 }

 public override Task SetParametersAsync(ParameterView parameters)
 {
    
    
     Print($"SetParametersAsync!");

     return base.SetParametersAsync(parameters);
 }

事件刷新

避免覆盖 ASP.NET Core Blazor 中的参数

ComponentBase 的呈现约定

Blazor 生命周期

ASP.NET Core Blazor 性能最佳做法

为什么传入非基础元素,会强制刷新

第一个原因:传入的委托类型不属于非基础元素。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

自动刷新逻辑

  • 父元素的值发生修改时
    • 如果父元素的值和之前的值相同时,就不发生刷新
    • 如果不同,则单独通知子组件刷新。
  • 如果传入的是非基础元素,比如回调函数
    • 每次强制刷新,因为C#不可知回调函数是否发生修改。而且是全部元素强制刷新。

如何解决委托事件强制刷新问题

  • 声明两个元素,一个是public,一个是private
  • 在子组件的创建事件OnInitialized时,将public付给private。
  • 之后无论如何更新,private的值都不受父组件控制。

猜你喜欢

转载自blog.csdn.net/qq_44695769/article/details/132256478