何が問題なのかわからないので、調査する必要があります。時間に余裕ができたらやります。あなたはあなたが経験したことについて正しいです。ただし、 @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 が含まれます。change イベントは UI イベントであるため、StateHasChanged が自動的に呼び出され、値が変更され、再レンダリングする必要があることをコンポーネントに通知します。コンポーネントが再レンダリングされ、上記のようにテキスト ボックスに値 123asdf が含まれます。
値 123 を入力すると、もう一度処理サイクルが繰り返されますが、コードを見てください。
somedata = eventArgs.Value.ToString();
値 123 が somedata に割り当てられます。これで somedata === 123 ですね。
somedata = somedata + "asdf";
文字列「asdf」を somedata の値に追加し、組み合わせた値を somedata に割り当てます。somedata には値 '123asdf" が含まれています。これは以前と同じ値ですよね ? これは、コンポーネントの状態が変更されないため、コンポーネントが再レンダリングされないことを意味します。 注: StateHasChanged メソッドは、状態が変化したことをコンポーネントに通知するようなものですが、コンポーネントは再レンダリングするかどうかを決定するため、コードで使用してもコンポーネントは動揺しません。 UI イベントで自動的に呼び出されるため、必要ありません。
次に 123 を入力してタブアウトすると、変更イベントはまったくトリガーされません。ただし、次に値 1234 を入力すると、プロパティとテキスト ボックスの両方に結合された値 1234asdf が表示されます。
この動作は仕様です...