如何知道 EventCallback 何时被触发?
How to know when EventCallback has been fired?
我正在对 Razor 组件进行一些测试,但我在将 属性 从子组件更新到祖父组件时遇到问题。
我正在使用 EventCallback 在子组件更新 属性 时更新我的父组件。它适用于具有两个级别 (ParentComponent/ChildComponent) 的架构,但是,它不适用于三个级别 (GrandParentComponent/ParentComponent/ChildComponent)。
让我们举一个包含三个组件 A、B 和 C 的示例。
- A (GrandParentComponent)
-- B (ParentComponent)
--- C (ChildComponent)
- 更新 B 将触发 EventCallback 以更新 A
- 更新 C 将触发 EventCallback 以更新 B,但是在此阶段 B 不会在更新后触发 EventCallback,因此 A 组件仍未更新。
如何知道组件是否已被 EventCallback 更新。
我想知道这一点,这样我就可以在 C 的 EventCallback 被触发时从 B 触发 EventCallback。是否有意义? :D
How to know when EventCallback has been fired?
定义一个事件委托,您可以在触发 EventCallback 时触发...只是开个玩笑。
您可以通过多种方式做到这一点。这是一个:
ComponentA.razor
<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;
}
}
ComponentB.razor
<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);
}
}
}
ComponentC.razor
<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 中添加了一个员工对象,在这种情况下,通知服务通知所有相关方(订阅组件) 这个事实。
希望这对您有所帮助...
我正在对 Razor 组件进行一些测试,但我在将 属性 从子组件更新到祖父组件时遇到问题。
我正在使用 EventCallback 在子组件更新 属性 时更新我的父组件。它适用于具有两个级别 (ParentComponent/ChildComponent) 的架构,但是,它不适用于三个级别 (GrandParentComponent/ParentComponent/ChildComponent)。
让我们举一个包含三个组件 A、B 和 C 的示例。
- A (GrandParentComponent)
-- B (ParentComponent)
--- C (ChildComponent)
- 更新 B 将触发 EventCallback 以更新 A
- 更新 C 将触发 EventCallback 以更新 B,但是在此阶段 B 不会在更新后触发 EventCallback,因此 A 组件仍未更新。
如何知道组件是否已被 EventCallback 更新。
我想知道这一点,这样我就可以在 C 的 EventCallback 被触发时从 B 触发 EventCallback。是否有意义? :D
How to know when EventCallback has been fired?
定义一个事件委托,您可以在触发 EventCallback 时触发...只是开个玩笑。
您可以通过多种方式做到这一点。这是一个:
ComponentA.razor
<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;
}
}
ComponentB.razor
<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);
}
}
}
ComponentC.razor
<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 中添加了一个员工对象,在这种情况下,通知服务通知所有相关方(订阅组件) 这个事实。
希望这对您有所帮助...