useEffect
について調べてみると結構面白かったので、useEffect
についての記事を書いていきます。
useEffectのエフェクトって?
そもそもエフェクトとは何なのでしょうか?エフェクトとは、副作用のことを指すのです。
副作用とは、実行されている関数の範囲外の何かに影響を与えるものです。
例としては、バックエンドサーバーからAPIを呼び出したり、setTimeout
関数などのどんな値が返ってくるか分からない関数を呼び出すことが挙げられます。
しかし、このような関数と、どんな値が返ってくるか予め分かっている関数(純粋関数)と一緒に使うと、思わぬ処理をしてしまう可能性があります。
できれば、副作用は純粋関数のレンダリング後にやった方がいいですよね。
そこで必要になってくるのがuseEffect
なんです。
useEffect
は、外界と対話するためのツールでありながら、それが含まれるコンポーネントのレンダリングやパフォーマンスには影響を与えないんです。
useEffectの使い方
useEffect
の使い方は、以下のように使います。
import { useEffect } from 'react'
function GetPostTitle({ title }){
useEffect(() => {
document.title = title;
}, [title]);
return <h1>{title}</h1>
今回の例で言えば、スコープ外の値であるtitle
によってブログのタイトルをブラウザのタブのタイトルにするコードです。
手順としては、
1.useEffect
をインポートする
2.関数と配列の2つの引数を渡す
1は説明はいらないでしょう。
2の関数と配列の2つの引数を渡す、ということに関してですが、どんな配列を渡せばいいのでしょうか?
それは、依存関係配列と呼ばれるものです。
今回で言えば、スコープ外の値であるtitle
という値を変更しているため、このtitle
という値に依存関係が発生します。そのため、title
という値が第二引数として格納されます。
この配列で行われていることは、値がレンダリングされたときに値が変わっているかどうかを確認することです。変更されている場合は、useEffect
関数が実行されます。
もし第二引数が空配列だとしたら、useEffect
は初回レンダー後のみ呼び出されることになります。
今後の展望
今後の展望としては、こちらの記事を読んで、さらなるuseEffect
について調べていこうと思います。
【参考記事】