[解決済み] useEffect React Hook使用時の依存性欠如の警告を修正する方法
質問
React 16.8.6で(以前のバージョン16.8.3では良好でした)、フェッチリクエストの無限ループを防止しようとすると、このエラーが発生します。
./src/components/BusinessesList.js
Line 51: React Hook useEffect has a missing dependency: 'fetchBusinesses'.
Either include it or remove the dependency array react-hooks/exhaustive-deps
無限ループを停止させる解決策が見つからない。を使わないようにしたい。
useReducer()
. 私はこの議論を見つけた
[ESLint] lint ルール #14920 'exhaustive-deps' に対するフィードバック
ここで、可能な解決策は
You can always // eslint-disable-next-line react-hooks/exhaustive-deps if you think you know what you're doing.
自分のやっていることに自信がないので、まだ実装してみたことはない。
現在、こんな設定をしています。
ReactフックのuseEffectが永遠に連続実行される/無限ループする
についてのコメントのみです。
useCallback()
というのは、よくわからない。
現在、私が使っている方法
useEffect()
(と同じように最初に一度だけ実行したい)。
componentDidMount()
):
useEffect(() => {
fetchBusinesses();
}, []);
const fetchBusinesses = () => {
return fetch("theURL", {method: "GET"}
)
.then(res => normalizeResponseErrors(res))
.then(res => {
return res.json();
})
.then(rcvdBusinesses => {
// some stuff
})
.catch(err => {
// some error handling
});
};
解決方法は?
fetchBusinessesメソッドをエフェクト以外の場所で使用していない場合、単純にエフェクトに移動して警告を回避することができます。
useEffect(() => {
const fetchBusinesses = () => {
return fetch("theURL", {method: "GET"}
)
.then(res => normalizeResponseErrors(res))
.then(res => {
return res.json();
})
.then(rcvdBusinesses => {
// some stuff
})
.catch(err => {
// some error handling
});
};
fetchBusinesses();
}, []);
しかし、レンダリング以外でfetchBusinessesを使用する場合、次の2点に注意する必要があります。
-
について何か問題がありますか?
ではなく
パス
fetchBusinesses
をメソッドとして使用し、それを囲むクロージャでマウントするのですか? - あなたのメソッドは、その周りのクロージャから受け取るいくつかの変数に依存していますか?これは、あなたの場合ではありません。
- レンダリングのたびに fetchBusinesses は再作成されるため、useEffect に渡すと問題が発生します。したがって、依存関係の配列に渡す場合は、まず fetchBusinesses をメモする必要があります。
結論から言うと、もしあなたが
fetchBusinesses
の外側で
useEffect
を使用すると、ルールを無効にすることができます。
// eslint-disable-next-line react-hooks/exhaustive-deps
そうでなければ、このメソッドを useEffect の内部に移動させることができます。
ルールを無効にするには、次のように記述します。
useEffect(() => {
// other code
...
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [])
関連
-
[解決済み] Jestの `beforeEach` グローバルは何のためにあるのですか?
-
[解決済み] React.createElement: type is invalid -- expected a string.
-
[解決済み] FontAwesomeの無料パッケージに含まれているアイコンのオブジェクト名はどこにあるのですか?
-
[解決済み] ReactJS giving error Uncaught TypeError: Super expression は null か関数でなければならず、undefined ではありません。
-
[解決済み] jest: テストスイートの実行に失敗しました。予期しないトークンのインポート
-
[解決済み] TypeError: reactjs の未定義のプロパティ 'status' を読み取ることができません。
-
[解決済み] formcontrollabel - material-ui | Reactのデフォルトのtypography classを変更するには?
-
[解決済み] ReactコンポーネントのJest SnapshotテストにおけるSnapshotテストの仕組みとtoMatchSnapshot()関数は何をするのか?
-
[解決済み] Static HTML elements with event handlers require a role." を修正するにはどうすればよいですか?
-
[解決済み] ESLintとTSLintの違い【クローズド】について
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】ngrokがReact devサーバーに接続しようとすると、無効なホストヘッダが表示される。
-
[解決済み] ReactJS giving error Uncaught TypeError: Super expression は null か関数でなければならず、undefined ではありません。
-
[解決済み] material-ui-pickers KeyboardDatePicker をモーメントで使用するには?
-
[解決済み] リアクトです。<tr>は<td>の子として表示できません。コメント > td > tr を参照してください。
-
[解決済み] sh: react-scripts: npm start の実行後にコマンドが見つからない。
-
[解決済み] ReactJs "インバリアント違反..." リアクトの古典的な問題
-
[解決済み] validateDOMNesting警告React
-
[解決済み] nextjsで異なる.envファイルを使用するには?
-
[解決済み] 拡張子.tsと.tsxの違いは何ですか?どちらもreactのタイプスクリプトファイルの拡張子として使用されます。では、どこで使うべきなのでしょうか?
-
[解決済み] Reactでグローバル変数を宣言する方法とは?