在 DynamicComponent Blazor 上轻松触发 OnParametersSet
Easily trigger OnParametersSet on DynamicComponent Blazor
我有一个显示各种 input.razor 类 的动态组件。我有一个下拉列表,我从中提取输入类型并调整 DynamicComponent 类型
<DynamicComponent Type=ConfigComponentType @ref=ConfigComponent></DynamicComponent>
设置后,组件的 OnParametersSet 函数将首先运行。太棒了~
如果我换到另一个组件然后换回它再次运行。太棒了~
但是如果我只是停留在这个组件上,它就不会再调用它了。该死的...
如您所见,我没有向 dynamicComponent 传递任何参数,因此无法轻松更新参数对象。我尝试了很多东西,包括:
- 使 ComponentType 为空 -- 无
- 隐藏 UI 上的动态组件 -- 只是闪烁
- 调用 StateHasChanged --nothing
- 调用 ConfigComponent.SetParametersAsync(new ParameterView()) -- 抛出错误:对象引用未设置到对象的实例
我正在尝试调用 OnParametersSet,以便我可以使用新的对象实例重新初始化我的对象。也许还有另一种方法可以做到这一点?
有人对如何轻松触发输入组件的刷新有任何建议吗?
无论您在“input.razor”组件中做什么,都需要事件驱动。由于您没有显示太多代码,因此很难在做出一些疯狂假设的情况下向您显示与您的问题相关的代码,因此这里有一些通用信息。
如果说您的输入控件链接到数据记录,那么该记录应该由范围数据服务检索。该服务包含您在各种组件中显示的当前数据记录。它还有一个 RecordChanged
事件,每当记录更改时都会调用该事件。您的输入剃刀组件注册事件并根据需要调用 StateHasChanged
。
如果你提供更多的代码,我可以给你一些相关的代码。或者在 Internet 上搜索“Blazor 通知程序模式”以获取各种示例。
问题是渲染引擎没有将组件视为新组件。它只能通过其索引和类型,因为 none 已更改它更新现有组件,因此它不会触发 OnParametersSet
要解决此问题,您需要在组件上使用 @key
,以便渲染引擎知道它是一个新组件,而不管其索引如何。
我有一个显示各种 input.razor 类 的动态组件。我有一个下拉列表,我从中提取输入类型并调整 DynamicComponent 类型
<DynamicComponent Type=ConfigComponentType @ref=ConfigComponent></DynamicComponent>
设置后,组件的 OnParametersSet 函数将首先运行。太棒了~
如果我换到另一个组件然后换回它再次运行。太棒了~
但是如果我只是停留在这个组件上,它就不会再调用它了。该死的...
如您所见,我没有向 dynamicComponent 传递任何参数,因此无法轻松更新参数对象。我尝试了很多东西,包括:
- 使 ComponentType 为空 -- 无
- 隐藏 UI 上的动态组件 -- 只是闪烁
- 调用 StateHasChanged --nothing
- 调用 ConfigComponent.SetParametersAsync(new ParameterView()) -- 抛出错误:对象引用未设置到对象的实例
我正在尝试调用 OnParametersSet,以便我可以使用新的对象实例重新初始化我的对象。也许还有另一种方法可以做到这一点?
有人对如何轻松触发输入组件的刷新有任何建议吗?
无论您在“input.razor”组件中做什么,都需要事件驱动。由于您没有显示太多代码,因此很难在做出一些疯狂假设的情况下向您显示与您的问题相关的代码,因此这里有一些通用信息。
如果说您的输入控件链接到数据记录,那么该记录应该由范围数据服务检索。该服务包含您在各种组件中显示的当前数据记录。它还有一个 RecordChanged
事件,每当记录更改时都会调用该事件。您的输入剃刀组件注册事件并根据需要调用 StateHasChanged
。
如果你提供更多的代码,我可以给你一些相关的代码。或者在 Internet 上搜索“Blazor 通知程序模式”以获取各种示例。
问题是渲染引擎没有将组件视为新组件。它只能通过其索引和类型,因为 none 已更改它更新现有组件,因此它不会触发 OnParametersSet
要解决此问题,您需要在组件上使用 @key
,以便渲染引擎知道它是一个新组件,而不管其索引如何。