[解決済み] Reactコンポーネントでthis.setStateを複数回使用するとどうなりますか?
2022-07-17 10:10:38
質問
this.setStateを複数回(ここでは2回)使用した場合にどうなるかを確認したかったのです。 私はコンポーネントが2回レンダリングされると思っていましたが、どうやら1回だけレンダリングされるようです。私が持っていたもう1つの期待は、おそらくsetStateの2回目の呼び出しが最初の呼び出しの上に実行されることでしたが、あなたはそれを推測しました - うまくいきました。
へのリンクは JSfiddle
var Hello = React.createClass({
render: function() {
return (
<div>
<div>Hello {this.props.name}</div>
<CheckBox />
</div>
);
}
});
var CheckBox = React.createClass({
getInitialState: function() {
return {
alex: 0
};
},
handleChange: function(event) {
this.setState({
value: event.target.value
});
this.setState({
alex: 5
});
},
render: function() {
alert('render');
return (
<div>
<label htmlFor="alex">Alex</label>
<input type="checkbox" onChange={this.handleChange} name="alex" />
<div>{this.state.alex}</div>
</div>
);
}
});
ReactDOM.render(
<Hello name="World" />,
document.getElementById('container')
);
ご覧のように、レンダリングするたびに「レンダリング」というアラートがポップアップ表示されます。
なぜ正常に動作したのか、説明はありますか?
どのように解決するのですか?
Reactは、イベントハンドラやライフサイクルメソッドで発生する状態の更新をバッチ処理します。そのため、状態を複数回更新する場合は
<div onClick />
ハンドラで複数回状態を更新した場合、React は再レンダリングする前にイベント処理が終了するのを待ちます。
はっきり言って、これはReactが制御する合成イベントハンドラとライフサイクルメソッドでのみ機能します。状態の更新は、AJAXでバッチ処理されず
setTimeout
イベントハンドラなどでは、状態の更新はバッチ処理されません。
関連
-
[解決済み】React this.setStateは関数ではありません。
-
[解決済み] Reactルータを使ったプログラムによるナビゲーション
-
[解決済み] varキーワードの目的と、どのような場合に使用する(または省略する)べきですか?
-
[解決済み] Reactのこの3つの点は何をするところなのでしょうか?
-
[解決済み] React-routerのURLを更新したり、手動で書き込んだりするとうまくいかない
-
[解決済み] React NativeとReactの違いは何ですか?
-
[解決済み] setStateを呼び出さずにReactコンポーネントを強制的に再レンダリングすることは可能ですか?
-
[解決済み] Reactコンポーネント外でのクリックを検出する
-
[解決済み] Reactのstateとpropsの違いとは?
-
[解決済み] React / React Nativeでコンストラクタを使用する場合とgetInitialStateを使用する場合の違いとは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Reactは状態の更新の順番を守るのか?
-
[解決済み] JavaScriptで、ある文字列が別の文字列の中に出現するすべてのインデックスを見つけるにはどうすればよいですか?
-
[解決済み] オブジェクトの配列からReactコンポーネントをレンダリングする
-
[解決済み] jqueryはjavascriptのライブラリなのかフレームワークなのか?[クローズド]
-
[解決済み] javascriptで文字列から関数を作成する方法はありますか?
-
[解決済み] ECMAScriptとは?
-
[解決済み] ドット記法の文字列を使用してオブジェクトの子プロパティにアクセスする [重複].
-
[解決済み] node.js シェルコマンドの実行
-
[解決済み] JavaScriptでクエリ文字列が存在するかどうかを確認するには?
-
[解決済み] Angularで、配列内のオブジェクトを検索したい。