如何知道EventCallback何时被解雇



我正在对剃刀组件进行一些测试,但我遇到了将属性从子组件更新到父组件的问题。

当子组件更新属性时,我使用EventCallback来更新父组件。它适用于具有两个级别(ParentComponent/ChildComponent(的体系结构,但不适用于三个级别(GrandParentComponent/ParentComponent/CildComponet(。

让我们举一个有三个组件A、B和C的例子。

- A (GrandParentComponent)
-- B (ParentComponent)
--- C (ChildComponent)
  • 更新B将触发EventCallback以更新A
  • 更新C会触发EventCallback来更新B,但在这个阶段,B在更新后不会触发EventCallback,因此A组件仍然没有更新

如何知道EventCallback是否更新了组件。

我想知道这一点,这样当C的EventCallback被触发时,我就可以从B触发EventCallback。这有意义吗?:D

如何知道EventCallback何时被触发?

定义一个事件委托,当EventCallback被触发时,您可以触发它。。。只是开玩笑。

你可以通过各种方式做到这一点。这里有一个:

组件A.剃须刀

<ComponentB ComponentBEvent="EventCallback.Factory.Create<string>(this, 
mymethod)"></ComponentB>
<p>Message from Component A @message</p>
@code {
private string message;
private Task mymethod(string str)
{
message = str;
return  Task.CompletedTask;
}
}

组件B.剃须刀

<ComponentC ComponentCEvent="EventCallback.Factory.Create<string>(this, 
mymethod)"></ComponentC>
<p>Message from Component B @message</p>
@code {
string myvalue;
[Parameter]
public EventCallback<string> ComponentBEvent { get; set; }
private string message;
private async Task mymethod(string str)
{
message = str;
if(ComponentBEvent.HasDelegate)
{
await ComponentBEvent.InvokeAsync(str);
}
}
}

组件C.剃须刀

<input type="text" value="@myvalue" @oninput="@((args) => { myvalue = 
args.Value.ToString(); ComponentCEvent.InvokeAsync(args.Value.ToString()); 
})" />

<p>Message from Component C @myvalue</p>
@code {
string myvalue;
[Parameter]
public EventCallback<string> ComponentCEvent { get; set; }
}

用法

<ComponentA />

注意:您可以使用使用状态模式的通知程序服务来实现此行为。该服务控制对象的状态、更新、删除等,并定义当操作发生时触发的事件,例如,在组件A中添加了员工对象,在这种情况下,通知程序服务会将此事实通知所有相关方(订阅组件(。

希望这能帮助。。。

相关内容

  • 没有找到相关文章

最新更新