React16.8 の新しい useEffec フック関数は、副作用を処理するために使用されます。 いわゆる「副作用」の簡単な例を挙げると、風邪をひいていて薬を飲んでも大丈夫なのに、薬を飲んだ後に体がその薬に対してアレルギー反応を起こす、この「アレルギー」が副作用です。 Reactでは、本来はDOMをレンダリングしてページに表示したいだけなのですが、DOM以外にもデータがあり、このデータを外部データソースから取得する必要があります。「外部データソースを取得する」という処理が副作用です。 useEffect の使い方については、公式サイトに掲載されている例を参考にしてください。ここでは主に useEffect の使用時に発生する問題についてまとめます。 繰り返しレンダリングループを避けるuseEffect を使用して配列を第 2 パラメータとして受け取り、第 2 パラメータを依存関係として使用します。DOM がレンダリングされ、副作用関数が実行されるたびに、依存関係のレンダリング前後の値が一致しているかどうかを確認するための浅い比較が行われます。一致していない場合は副作用が実行され、一致していない場合は実行されません。依存関係が空の配列 [] の場合、つまり比較する変数が渡されていない場合は、比較結果は常に変更されず、副作用ロジックは 1 回しか実行されません。 使用効果(() => { タイムアウトを設定する(() => { setCounter(カウンター + 1); }, 300) }, []); さらに、更新ボタンをクリックして外部データを取得したいが、無限ループを引き起こしたくない場合は、変数を「スイッチ」として使用して、DOM の循環レンダリングを回避しながら目的を達成できます。
function App() { const [count, setCount] = useState(0); const [loading, setLoading] = useState(true); // スイッチとしてロードします useEffect(() => { if (loading) { // これはロードが true の場合にのみ実行されることに注意してください setTimeout(() => { setCount(count + 1); setLoading(!loading); // ロード値を変更します }); } }, [loading]); // ここではロードが依存関係として使用されます // 最初の DOM レンダリングが完了した後、loading が true になり、副作用関数が実行され、count 値が 1 になり、loading が false になります。// state の値が変更されるため、更新され、コンポーネントが再度レンダリングされますが、この時点では loading が false であり、setTimeout は実行されません。 // ループを回避する // [更新] をクリックすると、読み込みが false から true に変わり、関数は更新を実行します // DOM が更新された後、useEffect が実行されます。loading がすでに true になっているため、副作用関数が実行でき、count が 1 から 2 に変わります。 // ロードすると true から false に変わります。 。 。 return ( <div> <h3>{count}</h3> <button onClick={() => { setLoading(true); }} > 更新 </button> </div> );} 副作用の除去についてuseEffect は副作用をクリーンアップする関数を返すことができます。 使用効果(() => { ChatAPI.subscribeToFriendStatus(props.id、handleStatusChange); 関数クリア(){ ChatAPI.unsubscribeFromFriendStatus(props.id、handleStatusChange); } クリアを返す; }); これには、useEffect の実行と破棄のプロセスが含まれます。
このことから、副作用クリーンアップ関数の特性を推測できます。
出力されたカウント値から、次の副作用関数が実行される前にクリア関数が実行されることもわかります。つまり、クリア関数のカウント値は最後のキャッシュのカウント値です。 さらに考えてみると、clear1 を実行すると props.id にアクセスされるので、この id の値は 1 でしょうか、それとも 2 でしょうか? これにはクロージャの概念が関係します。useEffect は関数を返し、この関数は実行時にクロージャを生成するからです。クロージャの定義によれば、返された clear 関数は自身のスコープ外の変数にアクセスできます。コンポーネントが初めてレンダリングされるときに id=1 が渡され、clear 関数の props.id の値は 1 になります。 以上がReact useEffectの理解と使用に関する詳細な内容です。React useEffectについてさらに詳しく知りたい方は、123WORDPRESS.COMの他の関連記事もぜひご覧ください! 以下もご興味があるかもしれません:
|
>>: Linux で SSH 経由でリモート ファイルシステムをマウントする方法の詳細な説明
目次序文1. scp2をインストールする2. テスト/本番環境サーバーのSSHリモートログインアカウ...
シェルスクリプトはアクセス制御を設定し、複数回のログイン失敗後にIPをブロックしてSSHのブルートフ...
この記事では、thinkphp5.1 + Vue+axiosを使用してファイルをアップロードする方法...
1. 三角形境界線の設定 コード: 幅: 300ピクセル; 高さ: 300px; 背景: 赤; 境界...
目次1. バックアップ1.1 万全の準備1.2 追加の準備2 バックアップとリカバリ2.1 データの...
CSSスタイルの分類1. 内部スタイル ---- インラインスタイルスタイルタグの使用 <ス...
Ubuntu では、ショートカット キーでタッチパッドをオフにできない状況によく遭遇します。この問題...
キャンバスを使用して、参照用の影付きのグラフィックとテキストを作成します。具体的な内容は次のとおりで...
目次典型的なウォーターフォールウェブサイトウォーターフォールフローレイアウトの原則一般的な考え方具体...
目次概要フィルターの定義フィルターの使用カスタムグローバルフィルターローカルフィルター予防例1(ロー...
VMware で仮想マシンを作成し、Redhat Linux オペレーティング システムをインスト...
1. ダウンロード公式サイトからmysql-5.7.19-linux-glibc2.12-x86_6...
マイクリMyCLI は、自動補完と構文の強調表示を備えた MySQL、MariaDB、および Per...
序文この記事では、DDCTF の 5 番目の質問、つまり不明なフィールド名をバイパスする手法を紹介し...
目次クラスコンポーネント機能コンポーネントsetStateの落とし穴React では多くの場所でデー...