[解決済み】一般的に、1つのコンポーネントで1つのuseEffectフックと多くのuseEffectフックのどちらを使用するのが良いのでしょうか?[クローズド]
2022-04-11 23:43:26
質問
リアクトコンポーネントに適用する副作用がいくつかありますが、それらを整理する方法を知りたいです。
- 1つのuseEffectとして
- または複数のuseEffect
パフォーマンスやアーキテクチャの面ではどちらが優れているのでしょうか?
解決方法は?
従うべきパターンは、ユースケースによって異なります。
最初に 最初のマウント時にイベントリスナーを追加し、アンマウント時にそれらをクリーンアップする必要がある状況や、特定のリスナーをクリーンアップし、プロップ変更時に再追加する必要があるケースがあるかもしれません。
このような場合、2つの異なる
useEffect
の方が、関連するロジックをまとめておくことができ、またパフォーマンス的にも有利です。
useEffect(() => {
// adding event listeners on mount here
return () => {
// cleaning up the listeners here
}
}, []);
useEffect(() => {
// adding listeners everytime props.x changes
return () => {
// removing the listener when props.x changes
}
}, [props.x])
2番目
ステートまたはプロップのいずれかが定義されたセットから変更されたときに、APIコールまたは他のサイドエフェクトをトリガーする必要があります。そのような場合、単一の
useEffect
というように、関連する依存関係を監視するのがよいでしょう。
useEffect(() => {
// side effect here on change of any of props.x or stateY
}, [props.x, stateY])
第3位
異なる変更のセットに対して別々のサイドエフェクトが必要です。そのような場合、関連する副作用を異なる
useEffect
s
useEffect(() => {
// some side-effect on change of props.x
}, [props.x])
useEffect(() => {
// another side-effect on change of stateX or stateY
}, [stateX, stateY])
関連
-
[解決済み] ReactJS giving error Uncaught TypeError: Super expression は null か関数でなければならず、undefined ではありません。
-
[解決済み] ReactのuseEffectでローディング関数を1回だけ呼び出す方法
-
[解決済み] react.jsでng-ifに相当するものは何ですか?
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] Swift Betaのパフォーマンス:配列のソート
-
[解決済み] setStateを呼び出さずにReactコンポーネントを強制的に再レンダリングすることは可能ですか?
-
[解決済み] useEffect React Hook使用時の依存性欠如の警告を修正する方法
-
[解決済み] Reactでブラウザのリサイズ時にビューを再描画する
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
-
[解決済み】react hooksで`setState`コールバックを使用する方法
最新
-
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 - 式は1つの親要素を持つ必要がありますか?
-
[解決済み】ReactJS: マテリアルuiのブレークポイントについて
-
[解決済み】プリセットファイルはオブジェクトのエクスポートができない
-
[解決済み] Webpack + Babelです。プリセット "es2015 "がディレクトリに相対して見つからなかった
-
[解決済み] ReactJsのCreateClassは関数ではない
-
[解決済み] React-Router 4 キャッチオールルート
-
[解決済み] ReactJS - SCRIPT1010: 期待される識別子 - IE11 で本番ビルドが実行されない
-
[解決済み] Error: yarn start - エラー コマンド "start" が見つかりません。
-
[解決済み] 拡張子.tsと.tsxの違いは何ですか?どちらもreactのタイプスクリプトファイルの拡張子として使用されます。では、どこで使うべきなのでしょうか?
-
[解決済み] componentDidUpdate'メソッドはいつ使用するのですか?