ユーズエフェクトフック-クイックガイド
18944 ワード
何が役に立つか
UseEffectは、我々のコンポーネントのライフサイクルのマウント、更新、およびアンマウント段階でコードを実行することができます反応組み込みフックです.
有効なフックは2つのパラメータを受け取ります:実行される1つの関数と依存関係の配列.
例を見ましょう
私の
app.js
私は2つの入力番号と1つのボタンをCalculator
コンポーネント.私たちは入力に数字を設定し、ボタンをクリックすると、状態が更新され、コンポーネントは小道具を介して番号を取得します.何も空想.import { useRef, useState } from "react";
import "./App.css";
import Calculator from "./Calculator";
const App = () => {
const inputA = useRef(0);
const inputB = useRef(0);
const [numbers, setNumbers] = useState({
numberA: inputA.current.value,
numberB: inputB.current.value,
});
const getTotalHandler = () => {
setNumbers({
numberA: +inputA.current.value,
numberB: +inputB.current.value,
});
};
return (
<>
<div className="container">
<div>
<label>Input A</label>
<input type="number" ref={inputA} />
</div>
<div>
<label>Input B</label>
<input type="number" ref={inputB} />
</div>
<button onClick={getTotalHandler}>Calculate</button>
<Calculator numberA={numbers.numberA} numberB={numbers.numberB} />
</div>
</>
);
};
export default App;
このコンポーネントはCalculator
小道具を通して受け取るnumberA
and numberB
を返す.const Calculator = ({ numberA, numberB }) => {
return <h1>The total is {numberA + numberB}</h1>;
};
export default Calculator;
コンポーネントがマウントされると、UseEffectを実行します
今すぐ使用します
useEffect
コンポーネントがマウントされたときにログオンする関数を実行します.まずインポートするuseEffect
フックreact
.import { useEffect } from "react";
このフックを実装するには、実行する関数と依存関係の配列を設定しなければなりません.import { useEffect } from "react";
const Calculator = ({ numberA, numberB }) => {
useEffect(() => {
console.log(`First render`);
}, []);
return <h1>The total is {numberA + numberB}</h1>;
};
export default Calculator;
この場合、私は依存する配列を空にしました.このコードを初めてレンダリングしたときに実行したいだけです.私が最初にコンポーネントをロードすると、コンソールに表示されます.
依存配列が空の場合、このログは、コンポーネントがマウントされたときのみ実行されます.更新するなら
App
コンポーネントの状態と更新Calculator
このログ関数は再び実行されません.チェックしましょう更新しました
numberA
and numberB
しかし、関数は実行しませんでした.プロップが更新されるたびにUseEffectを実行します
さて、小道具が更新される度に関数を実行しましょう.これは新しい小道具に基づいて副作用を実行するのに有用です.例えば、プロップから受け取った値に基づいてAPIから詳細を取得します.ポストの終わりには、これに関する例があります.
まずは、以前のコードに2つ目の効果を追加します.
import { useEffect } from "react";
const Calculator = ({ numberA, numberB }) => {
useEffect(() => {
console.log(`First render`);
}, []);
useEffect(() => {
console.log(`This gets executed each time the props are updated`);
}, [numberA, numberB]);
return <h1>The total is {numberA + numberB}</h1>;
};
export default Calculator;
今回は、依存関係の配列を空にしておきませんでした.そして、私は、NumberaとNumberBの小道具を追加しましたので、有効なフックは、プロップの1つが更新されるたびに、関数を実行しなければならないことを知っています.動作するかどうかチェックしましょう.はい.実際には、コンポーネントが最初にマウントされるのは
useEffect
フックが実行されます.使用して、APIからデータを取得するたびに
今、私はあなたを利用する方法を示します
useEffect
フックは、コンポーネントの小道具が更新されるたびにAPIからデータを取得します.この例では、新しいコンポーネントを作成しました
Rick
それは、リックとモティパブリックAPIからデータを得るために小道具を通して受け取られるIDを使用します.import { useState, useEffect } from "react";
const Rick = ({ id }) => {
const [character, setCharacter] = useState(null);
const [request, setRequest] = useState(`pendent`);
useEffect(() => {
setRequest(`pendent`);
const getApiResults = (characterId) => {
fetch(`https://rickandmortyapi.com/api/character/${characterId}`)
.then((response) => response.json())
.then((data) => {
setCharacter(data);
setRequest(`completed`);
});
};
getApiResults(id);
}, [id]);
let content = ``;
if (request === `completed`) {
content = (
<>
<img src={character.image} alt={character.name} />
<h1>{character.name}</h1>
</>
);
}
return content;
};
export default Rick;
からapp
コンポーネントIには、乱数を生成するボタンがあり、Rick
コンポーネント.最初のレンダリングでは、ボタンがあります.しかし、たびに我々はそれが生成され、小道具を介して渡さ乱数をクリックします.これは
useEffect
そのIDに基づいて、属しているリックとmorty文字を取得する関数Reference
この問題について(ユーズエフェクトフック-クイックガイド), 我々は、より多くの情報をここで見つけました https://dev.to/josec/react-useeffect-hook-a-quick-guide-4c3pテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol