今回はuseEffect(副作用フック)について学習する。
これ結構、ワカラナイww(説明の日本語が意味不明w)
useEffect(副作用フック)とは?
React Docに、副作用フックの説明が書いてあって、
副作用(effect)フックにより、関数コンポーネントないで副作用を実行することができるようになります
って書いてあるけど、もう「副作用」の意味が分からないww
なんやねん。
とりあえず、やってみよう。
インポート
インポートして、useEffectを使うよ!を宣言。
import { useEffect } from 'react';
使いどころ
- レンダリングされたタイミングで実行したい処理があるとき
- 最初のレンダリングの際にのみ実行したい処理があるとき
- 特定のstateの更新の際に、再レンダリングされるときに実行したい処理があるとき
構文
useEffectの第1引数に実行したい関数、第2引数に依存する値(その値が変わったときに関数を実行する)を設定する。
// 1. レンダリングされたタイミングで実行
useEffect(() => {
console.log('useEffectの関数がコールされた');
});
// 2. 初回レンダリング時のみ実行
useEffect(() => {
console.log('useEffectの関数がコールされた');
},[]);
// 3. state更新時の再レンダリング時に実行
useEffect(() => {
console.log('useEffectの関数がコールされた');
},[count]);
下記のクリックするとクリック数が表示されるコードを例にすると、1. はレンダリングのたびにコンソールに文字列が表示。
2. は、画面をリロードした際に1回だけコンソールに文字列が表示される。
3. は、クリックのボタンを押してcount の数値が上がっていくたびに、コンソールに文字列が表示される。
全体像はこんな感じ
3つ目のパターン(countが更新されるたびにコンソールに文字列が表示されるバージョン)
import './styles.css';
import { useState, useEffect } from 'react';
export default function App() {
const [count, setCount] = useState(0);
const [arr, setArr] = useState([]);
useEffect(() => {
console.log('useEffectの関数がコールされた');
}, [count]);
const handleCountUp = () => {
const arrCount = count + 1;
setCount(arrCount);
const newArr = [...arr];
newArr.push(arrCount);
setArr(newArr);
};
const handleResetCount = () => {
setCount(0);
setArr([]);
};
return (
<div id="App">
<h1>React useState動作確認用</h1>
<div id="use_state01">
<h2>{count}</h2>
<button onClick={handleCountUp}>
ここをクリックするとカウントされます
</button>
<button onClick={handleResetCount}>カウンタリセット</button>
</div>
<div id="use_state02">
<p>
<br />
</p>
<p>クリックしてカウンタが更新されると配列が更新されます</p>
{arr.map((val) => (
<h2 key={val}>{val}</h2>
))}
</div>
</div>
);
}