useEffectの使い方
React.jsのuseEffect
は、コンポーネントがレンダリングされた後、または状態やプロパティが変更された後に実行されます。
「副作用」と解説されているサイトや書籍が多くあります。なぜuseEffect
が副作用といわれるのか一言でいうと、薬を飲んだときに副作用が現れることがあるように、何かが起きたときに起こすことを書くのがuseEffect
だからです。
useEffectの使い方
useEffectを使う準備
useEffect
を使うときは、まず下記を書きます。フックを使うならそのフックを必ずimport
すると覚えておきましょう。
import { useState } from "react";
useEffect
はuseState
と一緒に使うことが多く、フックを2つ使う場合はこちらのように書きます。
import { useState } from "react";
import { useEffect } from "react";
こちらのように1行にまとめて書くこともできます。
import { useState, useEffect } from "react";
useEffectの基本構文
useEffect
の基本構文がこちら。
useEffect(() => {
// 何か処理を実行する
}, [状態やプロパティ]);
[状態やプロパティ]
は配列で、この配列で指定した状態やプロパティが変更された場合に、useEffect
が実行されます。[state, props]
のように複数を指定できます。
配列が空の場合は、コンポーネントがレンダリングされる度に実行されます。
useEffectを使う例
まず、ボタンを押すたびに数値がカウントアップされていく例から。
import React from "react";
import ReactDOM from "react-dom";
import { useState, useEffect } from "react";
const Counter = () => {
const [count, setCount] = useState(0);
useEffect(() => {
document.getElementById("output").innerText = count;
}, [count]);
return (
<div>
<button onClick={() => setCount(count + 1)}>カウントアップ</button>
<div id="output"></div>
</div>
);
};
ReactDOM.render(
<Counter />,
document.getElementById('root')
);
続いて、useEffect
に渡す配列を空にすると、ボタンを押してもカウントアップされず0
のままです。
import React from "react";
import ReactDOM from "react-dom";
import { useState, useEffect } from "react";
const Counter = () => {
const [count, setCount] = useState(0);
useEffect(() => {
document.getElementById("output").innerText = count;
}, []);
return (
<div>
<button onClick={() => setCount(count + 1)}>カウントアップ</button>
<div id="output"></div>
</div>
);
};
ReactDOM.render(
<Counter />,
document.getElementById('root')
);
useEffect
は、配列に何も指定しないと、レンダリングが行われたときに実行されるので、そのレンダリングのタイミングが初回のページ読込のタイミングとうわけです。