[解決済み] useEffectで、最初のレンダリング時にエフェクトの適用をスキップするにはどうすればよいですか?
2022-07-23 16:18:52
質問
Reactの新しいEffect Hooksで、再レンダリングの間に特定の値が変化していない場合、Reactに効果の適用をスキップするように指示することができます。
useEffect(() => {
document.title = `You clicked ${count} times`;
}, [count]); // Only re-run the effect if count changes
しかし、上記の例では、最初のレンダリング時と、その後の再レンダリング時に、以下のような効果が適用されます。
count
が変更された場合にも適用されます。最初のレンダリングで効果をスキップするように React に指示するにはどうすればよいですか。
どのように解決するのですか?
ガイドにあるように
Effect HookであるuseEffectは、関数コンポーネントからサイドエフェクトを実行する機能を追加します。ReactクラスのcomponentDidMount、componentDidUpdate、componentWillUnmountと同じ役割を果たしますが、1つのAPIに統一されています。
ガイドのこの例では、次のように期待されています。
count
が 0 になるのは最初のレンダリング時のみです。
const [count, setCount] = useState(0);
ということで、次のように動作します。
componentDidUpdate
として動作し、さらにチェックが入ります。
useEffect(() => {
if (count)
document.title = `You clicked ${count} times`;
}, [count]);
これは基本的にカスタムフックで
useEffect
の代わりに使えるカスタムフックは、基本的にこのように動作します。
function useDidUpdateEffect(fn, inputs) {
const didMountRef = useRef(false);
useEffect(() => {
if (didMountRef.current) {
return fn();
}
didMountRef.current = true;
}, inputs);
}
を提案した @Tholle に謝意を表します。
useRef
の代わりに
setState
.
関連
-
[解決済み】<Router>の外側で<Link>を使用してはならない
-
[解決済み】Reactを使用したMapBoxのCSSが欠落している件
-
[解決済み】ngrokがReact devサーバーに接続しようとすると、無効なホストヘッダが表示される。
-
[解決済み] Apolloクライアントでログアウトした後、ストアをリセットする
-
[解決済み] ReactのuseEffectでローディング関数を1回だけ呼び出す方法
-
[解決済み] Webpack + Babelです。プリセット "es2015 "がディレクトリに相対して見つからなかった
-
[解決済み] sh: react-scripts: npm start の実行後にコマンドが見つからない。
-
[解決済み] ReactJS で inst.render が関数でないエラーが発生する
-
[解決済み】ReactJS - "setState "が呼ばれるたびにrenderが呼び出されるのですか?
-
[解決済み】ReactのuseEffectフックを初期レンダリング時に実行しないようにする
最新
-
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を使用したMapBoxのCSSが欠落している件
-
[解決済み】ngrokがReact devサーバーに接続しようとすると、無効なホストヘッダが表示される。
-
[解決済み] Jestの `beforeEach` グローバルは何のためにあるのですか?
-
[解決済み] ReactjsのEsLintの "react / jsx-props-no-spreading "エラーを無効化する。
-
[解決済み] componentWillReceiveProps は名称が変更されました。
-
[解決済み] ReactJS で inst.render が関数でないエラーが発生する
-
[解決済み] 矢印本体を囲む予期せぬブロックステートメント
-
[解決済み] React Hooksの「exhaustive-deps」lintルールを理解する
-
[解決済み] componentDidUpdate'メソッドはいつ使用するのですか?
-
[解決済み] React.useStateでpropsから状態を再読み込みしない