Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正在对无关组件调用OnSetParameterAsync_C#_Blazor_Blazor Client Side_Blazor Webassembly - Fatal编程技术网

C# 正在对无关组件调用OnSetParameterAsync

C# 正在对无关组件调用OnSetParameterAsync,c#,blazor,blazor-client-side,blazor-webassembly,C#,Blazor,Blazor Client Side,Blazor Webassembly,我目前正在做一个使用Blazor WebAssembly作为前端框架的项目,但是,我认为我在状态管理方面遇到了一些麻烦。这个问题发生在一个大型复杂的解决方案中,所以我重新创建并简化了它,这样我就可以在这里简洁地描述它,而不需要所有的膨胀 我有一个包含两个组件的页面:一个朋友列表和一个追随者列表,每个页面都有一个按钮,可以按升序或降序对列表进行排序 如果我覆盖并在FollowerList组件内部的参数setasync上放置一个断点,然后单击好友列表组件的排序按钮,它将到达FollowerList组

我目前正在做一个使用Blazor WebAssembly作为前端框架的项目,但是,我认为我在状态管理方面遇到了一些麻烦。这个问题发生在一个大型复杂的解决方案中,所以我重新创建并简化了它,这样我就可以在这里简洁地描述它,而不需要所有的膨胀

我有一个包含两个组件的页面:一个朋友列表和一个追随者列表,每个页面都有一个按钮,可以按升序或降序对列表进行排序

如果我覆盖并在FollowerList组件内部的参数setasync上放置一个断点,然后单击好友列表组件的排序按钮,它将到达FollowerList组件上我设置的断点

我的印象是,只有当馈送到组件的属性发生更改或其状态发生更改时,才会对组件调用OnParametersSet/Async。 在我下面的代码中,你可以看到我有两个单独的列表,一个被馈送到一个组件,另一个被馈送到另一个组件,所以我不确定这个方法是如何在未被触碰的组件上触发的

因此,我的问题是:为什么它会在不相关的组件上达到断点?这是故意的行为吗

页面视图

Index.razor

@page/“
分类朋友
排序跟随者

经过进一步研究,我的同事也深入研究了这个问题,我们发现了导致这种行为的原因

我再次开始研究组件的生命周期,并强调了这部分内容:

OnParametersSetAsyncOnParametersSet称为:

  • 在OnInitialized或OnInitializedAsync中初始化组件后
  • 当父组件重新渲染并提供:
    • 只有至少一个参数已更改的已知基元不可变类型
    • 任何复杂类型的参数。框架无法知道复杂类型参数的值是否在内部发生了变化,因此它将参数集视为已更改

因此,这将我的问题改为:是什么导致父组件重新渲染?本能地,我开始观察Blazor中按钮的行为,并快速阅读每个UI事件调用的
statehaschange
,无论是
onclick
onchange
等等。因此,当我单击按钮时,它也在调用
statehaschange
,这导致组件重新呈现并重新分配后续子级参数,前提是它们是复杂类型。

经过进一步研究,我的同事也深入研究了这个问题,我们发现了导致这种行为的原因

我再次开始研究组件的生命周期,并强调了这部分内容:

OnParametersSetAsyncOnParametersSet称为:

  • 在OnInitialized或OnInitializedAsync中初始化组件后
  • 当父组件重新渲染并提供:
    • 只有至少一个参数已更改的已知基元不可变类型
    • 任何复杂类型的参数。框架无法知道复杂类型参数的值是否在内部发生了变化,因此它将参数集视为已更改
因此,这将我的问题改为:是什么导致父组件重新渲染?本能地,我开始观察Blazor中按钮的行为,并快速阅读每个UI事件调用的
statehaschange
,无论是
onclick
onchange
等等。因此,当我单击按钮时,它也在调用
statehaschange
,这导致组件重新呈现并重新分配后续子级参数,前提是这些子级参数类型复杂