1

以下は簡単なコードです

 @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) 2 回目に入力 1 を同じ値で更新します。変更イベントが発生し、コードは機能しますが、値が入力 1
秒で更新されません: 値「123」を再度入力します --- changeValue 関数が呼び出されます --> 入力 1 = 「123」

4

1 に答える 1

3

何が問題なのかわからないので、調査する必要があります。時間に余裕ができたらやります。あなたはあなたが経験したことについて正しいです。ただし、 @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 が表示されます。

この動作は仕様です...

于 2020-02-27T15:40:17.610 に答える