useEffect
機能成分の副作用を処理するために使用されるReactのフックです。副作用は、データの取得、サブスクリプションのセットアップ、DOMの手動変更など、コンポーネントの範囲外の何かに影響を与える操作です。 useEffect
、レンダリング後にこれらの副作用を実行でき、コンポーネントを外部システムと同期するために使用できます。
useEffect
使用するには、通常、副作用コードを含む関数を渡します。この関数は、デフォルトですべてのレンダリングの後に呼び出されますが、 useEffect
ための2番目の引数として依存関係アレイを渡すことで呼び出されるときに制御できます。
useEffect
:の使用方法の基本的な例は次のとおりです。
<code class="javascript">import React, { useEffect, useState } from 'react'; function MyComponent() { const [data, setData] = useState([]); useEffect(() => { // This is the side effect fetch('/api/data') .then(response => response.json()) .then(data => setData(data)); }, []); // Empty dependency array means this effect runs once on mount return ( <div> {data.map(item => ( <div key="{item.id}">{item.name}</div> ))} </div> ); }</code>
この例では、 useEffect
使用して、コンポーネントがマウントされたときにAPIからデータを取得します。空の依存関係アレイ[]
により、初期レンダリングで効果が1回だけ実行されるようにします。
コンポーネント自体のレンダリングに直接関係しない操作を実行する必要がある場合は、ReactコンポーネントでuseEffect
使用する必要があります。これらの操作には、以下が含まれますが、これらに限定されません。
useEffect
、コンポーネントの最初のレンダリング後、または特定の状態の変更に応じて、これらの操作を実行するのに特に役立ちます。 EffectをuseEffect
2番目の引数として依存関係アレイを渡すことにより、効果がいつ実行されるかを指定できます。例えば:
[]
を渡します。 useEffect
で管理できる一般的な副作用は次のとおりです。
データフェッチ: useEffect
使用して、コンポーネントがマウントされたとき、または特定の小道具または状態変更時にAPIまたはデータベースからデータを取得できます。これにより、コンポーネントのデータが最新になります。
<code class="javascript">useEffect(() => { fetchData(); }, [someDependency]);</code>
サブスクリプションの設定:コンポーネントが外部データソースの変更に反応する必要がある場合は、 useEffect
使用してサブスクリプションを設定できます。
<code class="javascript">useEffect(() => { const subscription = someExternalDataSource.subscribe(handleChange); return () => subscription.unsubscribe(); }, []);</code>
DOMを手動で変更する:たとえば、入力フィールドに焦点を合わせるために、DOMと直接対話する必要がある場合があります。
<code class="javascript">useEffect(() => { inputRef.current.focus(); }, []);</code>
タイマー: setTimeout
やsetInterval
などのタイマーのセットアップとクリアは、 useEffect
で管理できます。
<code class="javascript">useEffect(() => { const timer = setTimeout(someFunction, 1000); return () => clearTimeout(timer); }, []);</code>
特にサブスクリプションやタイマーを扱う場合、メモリの漏れや不必要な操作を防ぐためには、 useEffect
を備えた適切なクリーンアップを確保することが重要です。クリーンアップを実行するには、 useEffect
コールバックから関数を返します。このクリーンアップ関数は、コンポーネントが依存関係の変更により効果が再び実行されようとしているときに呼び出されます。
クリーンアップの実装方法の例は次のとおりです。
<code class="javascript">import React, { useEffect, useState } from 'react'; function MyComponent() { const [count, setCount] = useState(0); useEffect(() => { const timer = setInterval(() => { setCount(prevCount => prevCount 1); }, 1000); // Cleanup function return () => { clearInterval(timer); }; }, []); // Empty dependency array ensures this effect runs once on mount return ( <div> <h1>Count: {count}</h1> </div> ); }</code>
この例では、 useEffect
カウンターを毎秒増分する間隔を設定します。クリーンアップ関数clearInterval(timer)
コンポーネントがマウントされているときに間隔がクリアされたり、依存関係の変更により効果が再実行されることを保証します。これにより、間隔がバックグラウンドで実行され続けるのを防ぎ、メモリリークや予期しない動作を引き起こす可能性があります。
以上がUseEffectとは何ですか?副作用を実行するためにどのように使用しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。