5
1

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のイベント付与とuseCallback

Last updated at Posted at 2023-05-19

クリックイベント

指定の仕方は3つある。
①下記のようにonClickの中に関数を記述してあげればクリックイベントが適用される。

//関数宣言
<button
  onClick={function (){
    alert(123);
  }}>
  ボタン
</button>

//アロー関数
<button
  onClick={ () => {
    alert(123);
  }}>
  ボタン
</button>

②return外に書くバージョン。

const handleClick = () => {
  alert(123);
}

return(
  <button onClick={handleClick}>
    ボタン
  </button>
)

③さらにコンポーネントの外に出すこともできる。

const handleClick = () => {
  alert(123);
}

export function Header(){
  return(
    <button onClick={handleClick}>
      ボタン
    </button>
  )
}

3つの例を挙げたが、①はあまりお勧めしない。
なぜなら関数の記述が増えたときに、可読性が悪くなるからだ。処理のコードが増えるのなら、HTMLとJSは確実に分けた方がいい。

コンポーネント内で変数を使用するときは②を使用し、特に変数を使用しないのであれば③を使うといい。

下記はコンポーネント内の変数をコンポーネント外で使用するとき。記述のように変数を引数として渡さなければならない。

const handleClick = (foo) => {
  alert(foo);
}

export function Header(){
  const foo = 1;

  return(
    <button 
      onClick={() => { handleClick(foo) 
    }}>
      ボタン
    </button>
  )
}

※ただ②にも注意点があり、コンポーネントが再レンダリングされるとその中のメソッドが再生成されてしまう。
が、解決策がある。
それがuseCallback!

useCallback

useCallbackを使用することによって、処理自体は変わらないがコンポーネントが再レンダリングされたときに再生成されることがなくなる。
記述の仕方は下記の通り。

「()」と「第二引数」を足すことを忘れないように注意。

import { useCallback } from 'react';

export function Header(){
  const handleClick = useCallbacl( () => {
    alert(123);
  },[]);

  return(
    <button onClick={handleClick}>
      ボタン
    </button>
  )
}

まとめ

基本的には②と③を使っていく。
・②を使うときは、コンポーネント内の変数を使い、記述が煩雑になるとき。
・③を使うときは、コンポーネント内の変数等をあまり扱わないとき。
・①は使わん!

5
1
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
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?