0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[自分用]Next.jsの空配列について

Posted at

useEffectの第二引数の役割とは

簡単にいうと、[]に記述された変数が変更されると、改めてuseEffectの中身が実行される。

下記はクリックイベントのコードだが、そこで使用した変数fooをuseEffectの第二引数に記述。
そうすることによりfooが変わるたびにuseEffectの中身が実行される。

export default function Home() {
  const [foo, setFoo] = useState(1);

  const handleClick = () => {
    setFoo(foo => foo + 1);
  };

  useEffect(() => {
    console.log('その次にマウントが実行されるよ');
    return () => {
      console.log('fooが変わると最初にアンマウントが実行されて');
    }
  }, [foo]);

  return (
    <>
      <h1>{foo}</h1>
      <button
        onClick={handleClick}>
        ボタン
      </button>
      <Main page="index" />
    </>
  )
}

useCallbackの第二引数の役割とは

こちらも[]に記述された変数が変更されると、改めてuseEffectの中身が実行される。

ちなみに、
下記に例を記述したが、第二引数に何も指定しなかったら[foo]の中身はずっと同じ状態になる。
(ほんとは2,3,4...と増えてほしい)

理由はuseCallbackは再生成されないから。

const handleClick = useCallback(() => {
  console.log(foo);
  if(foo < 10){
    setFoo(foo => foo + 1);
  }
},[])

なぜこんな機能があるのか

コード量が多くなったときに、全てレンダリングするのは効率とパフォーマンスが悪くなる。
だから必要最低限のレンダリングを実行させるためにも必要な機能。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?