StateHasChanged是否重新呈现所有组件或仅重新呈现差异?

时间:2019-12-02 18:42:13

标签: c# blazor

我正在学习Blazor组件,我想知道StateHasChanged强制组件重新呈现所有自身或仅重新呈现差异。智慧报告指出

  

通知组件其状态已更改。如果适用,这将导致重新渲染组件。

“这将导致组件重新呈现”是什么意思?

1 个答案:

答案 0 :(得分:2)

StateHasChanged将仅导致差异被重新呈现。

为了证明这一点,我创建了以下带有2个按钮的Blazor组件:

  • 第一个按钮生成一万个var user = await repo.GetUserById(userId); 元素的列表,编号为0 .. 9999
  • 第二个按钮修改第一个<li>的值并调用StateHasChanged()

这是完整的代码:

<li>

然后我使用Chrome的开发工具来监视websocket。在“网络”选项卡上,单击第一个按钮时,我可以看到1.4 MB通过websockets传输到了客户端:

enter image description here

然后,在单击仅更改第一个元素的第二个按钮之后,我可以看到仅传输了153个字节:

enter image description here

因此,由此得出的结论是,仅“ diff”被渲染。