文章目录
- 前言
- 生命周期
- 子组件设置
- 事件刷新
- 为什么传入非基础元素,会强制刷新
- 自动刷新逻辑
- 如何解决委托事件强制刷新问题
前言
对于组件化来说,生命周期是必须掌握的知识,只有掌握了生命周期才能更好的去设置数据的变化。
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的值都不受父组件控制。