Blazor通过其触发更改事件手动操作相同值后,不会两次更新输入中的相同值



下面是简单的代码

@page "/demo"
<h3>POCBlazor</h3>
Input 1 :<input type="text" value="@somedata" @onchange="changeValue" placeholder="text 1" />
Input 2 :<input type="text" placeholder="text 2" />
@code {
public string somedata { get; set; }
void changeValue(ChangeEventArgs eventArgs)
{
somedata = eventArgs.Value.ToString();
somedata = somedata + "asdf";
StateHasChanged();
}
}

场景
1(我在输入1中添加新值,然后用"asdf"表示
例如:输入值"123"--调用changeValue函数-->输入1="123asdf">

2(第二次用相同的值更新输入1时,触发更改事件,代码工作,但输入1中的值未更新
第二次:再次输入值"123"---changeValue函数调用-->输入1="123">

我不确定问题出在哪里,应该对此进行调查。我会在有空的时候做的。你的经历是对的。但是,如果使用@bind指令,则可以获得所需的行为。执行此操作并验证。。。。

Input 1 :<input type="text" @bind="@Somedata" placeholder="text 1" />
Input 2 :<input type="text" placeholder="text 2" />
<p>@somedata</p>
@code {
private string somedata;
public string Somedata 
{ 
get {return somedata; }
set{
if( somedata != value)
{
somedata = value + "asdf";
}
}
}
} 

我想我知道问题出在哪里。。。

<h3>POCBlazor</h3>
Input 1 :<input type="text" value="@Somedata" @onchange="changeValue"> 
placeholder="text 1" />
Input 2 :<input type="text" placeholder="text 2" />
<p>@Somedata</p>
@code {
public string Somedata { get; set; }

void changeValue(ChangeEventArgs eventArgs)
{
Somedata = eventArgs.Value.ToString();
Somedata += "asdf";
}
}
}

当您在文本框中输入值123时,将调用onchnage事件,并因此执行事件处理程序。因此Somedata属性包含值123asdf。由于更改事件是一个UI事件,StateHasChanged会自动调用,并通知组件其值已更改,应重新渲染。该组件重新渲染,现在,如上所述,文本框包含值123asdf。

当你输入值123时,处理周期再次重复,但是,看看你的代码:

somedata = eventArgs.Value.ToString();

值123被分配给某些数据现在有些数据===123,对吧?

somedata = somedata + "asdf";

将字符串"asdf"添加到somedata的值中,并将组合值分配给somedata。现在somedata包含值"123asdf"。这与以前的值相同,对吧?这意味着你的组件不会被重新呈现,因为组件的状态没有改变。注意:StateHasChanged方法只是组件状态已更改的一种通知程序,但组件将决定是否重新呈现,因此即使您在代码中使用它,组件也会拒绝更改。顺便说一句,StateHasChanged方法的存在是不必要的,因为它是用UI事件自动调用的。

下次输入123并签出时,根本不会触发更改事件。但如果NEXT输入值1234,则同时输入属性和文本框将具有组合值:1234asdf

这种行为是故意的。。。

最新更新