# onClick

タグをクリックした際に、処理を走らせるようにするのに、`onClick`属性に行いたい処理をセットすることで可能です。BreadCrumbコンポーネントのaタグをクリックした際に、その要素をコンソールに出力するには、以下のように記述します。

<pre class="language-tsx" data-title="BreadCrumb.tsx◎"><code class="lang-tsx">...
        &#x3C;ol className="breadcrumb">
          {items.map((item) => (
            &#x3C;li key={item} className="breadcrumb-item">
<strong>              &#x3C;a href="#" onClick={() => console.log(item)}>
</strong>                {item}
              &#x3C;/a>
            &#x3C;/li>
          ))}
        &#x3C;/ol>
...
</code></pre>

上記の記述にて、各リンクをクリックした際に、コンソールにて出力されるようになるかと思います。

<figure><img src="https://1869761657-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcUBbYqol4PMzZJggiMqV%2Fuploads%2FDFekN36ZVMiaexEZYA9C%2F2023120622.png?alt=media&#x26;token=f86bb3fb-972e-4015-b90a-1cdc7df85d3c" alt=""><figcaption></figcaption></figure>

また、onClickの関数の引数にイベント型の値を受け取ることができ、onClickが作動したタグの要素の様々なプロパティを参照することができます。実際にイベント型を出力するようにしましょう。

<pre class="language-tsx" data-title="BreadCrumb.tsx◎"><code class="lang-tsx">...
        &#x3C;ol className="breadcrumb">
          {items.map((item) => (
            &#x3C;li key={item} className="breadcrumb-item">
<strong>              &#x3C;a href="#" onClick={(event) => console.log(event)}>
</strong>                {item}
              &#x3C;/a>
            &#x3C;/li>
          ))}
        &#x3C;/ol>
...
</code></pre>

コンソールに以下のようなオブジェクトが表示されるかと思います。

<figure><img src="https://1869761657-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcUBbYqol4PMzZJggiMqV%2Fuploads%2FfHJ3kVEK6fcdTsy2iFXN%2Freact202312062244.png?alt=media&#x26;token=3157961d-2e9e-4e4e-b9ef-08a7fb25c142" alt=""><figcaption></figcaption></figure>

`onClick`に定義するようなメソッドに関してですが、基本的に関数として定義し、呼び出すのが良いかと思います。

その際に、引数に型を定義しないとエラーとなります。こちらの引数の型を定義するために、aタグのonClickのeventにホバーすると、肩が表示されますので、`MouseEvent`という型でジェネリクスに、`HTMLAnchorElement(aタグの型)`を格納します。

<figure><img src="https://1869761657-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcUBbYqol4PMzZJggiMqV%2Fuploads%2FtorXpmzI6az3DzIEiRvx%2Fonclick2023120622.png?alt=media&#x26;token=083b40b6-5867-4bbd-be62-a274c9c19f68" alt=""><figcaption></figcaption></figure>

呼び出し時に関しては、`onClick={(event) => handleClick(event)}`と記述する必要がありますが、`(event) => handleClick(event)`の左側の`event`と右側の関数の`event`が同じの場合は、`onClick={handleClick}`と省略することができます。

<pre class="language-tsx" data-title="BreadCrumb.tsx◎"><code class="lang-tsx"><strong>import { MouseEvent } from "react";
</strong>
export const Breadcrumb = () => {
  const items = ["Home", "Library", "Date"];

<strong>  const handleClick = (event: MouseEvent&#x3C;HTMLAnchorElement>) => {
</strong><strong>      console.log(event);
</strong><strong>  }
</strong>
  return (
    &#x3C;>
      &#x3C;p>パンくずリスト&#x3C;/p>
      {items.length === 0 ? (
        &#x3C;p>itemがありません。&#x3C;/p>
      ) : (
        &#x3C;p>itemが{items.length}あります&#x3C;/p>
      )}
      &#x3C;nav aria-label="breadcrumb">
        &#x3C;ol className="breadcrumb">
          {items.map((item) => (
            &#x3C;li key={item} className="breadcrumb-item">
<strong>              &#x3C;a href="#" onClick={handleClick}>
</strong>                {item}
              &#x3C;/a>
            &#x3C;/li>
          ))}
        &#x3C;/ol>
      &#x3C;/nav>
    &#x3C;/>
  );
};

</code></pre>
