【发布时间】:2019-06-20 06:14:06
【问题描述】:
有一个parent和一个child组件,child有一个带有2个按钮的表单,一个是submit类型,另一个是button类型。它们的onclick处理程序都调用@987654327 @ 让家长回复。
在父组件处理了子组件发送的event后,submit按钮触发的事件也会在父组件上触发OnInit。
为什么会这样?
例子:
家长
<Child onsubmit=@((value)=>OnSubmit(value))
oncancel=@((value)=>OnCancel(value))></Child>
@functions()
{
private int x=3;
protected override void OnInit()
{
Console.WriteLine($"From OnInit ,x={this.x}");
}
protected override void OnAfterRender()
{
Console.WriteLine($"From AfterRender,x={this.x}");
}
protected void OnSubmit(int _x)
{
//lets say child sends x=7
this.x=_x;
Console.WriteLine($"From handler, x={this.x}");
}
protected void OnCancel(int _x)
{
//lets say child sends x=7
this.x=_x;
Console.WriteLine($"From handler, x={this.x}");
}
}
儿童
<form>
<button type="submit" onclick="@(()=>OnPressSubmit())">Trigger submit</button>
<button type="button" onclick="@(()=>OnPressCancel())">Trigger cancel</button>
<form>
@functions()
{
[Parameter] protected Action<int> onsubmit{get;set;}
public void OnPressSubmit()
{
this.onsubmit?.Invoke(7);
}
[Parameter] protected Action<int> oncancel{get;set;}
public void OnPressCancel()
{
this.oncancel?.Invoke(7);
}
当我运行此代码时,在控制台中我会看到variable 确实在事件处理程序OnEvent 中设置,但是它随后在OnInit 中重置。
OUTPUT(用于submit类型的按钮)
From Handler, x=7 //in parent eventhandler
From OnInit, x=3
From OnAfterRender, x=3
OUTPUT(用于button类型的按钮)
From Handler, x=7 //in parent eventhandler
From OnAfterRender, x=7
为什么submit 按钮在父级AFTER 上也触发OnInit,父级处理事件?
【问题讨论】:
-
这是正确的输出顺序吗? From Handler, x=7 //in eventhandler From OnInit, x=3 From OnAfterRender, x=3
-
是的,首先它分配正确然后,页面刷新。
parent页面在child标签关闭时进行完全刷新是否正常?根据条件@if,孩子在父母中
标签: c# forms components eventemitter blazor