添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
RalaCode
menu search

【React】onClickでclassNameをつけたり外したりする方法

React開発していて、以下のように思うことありませんか?

「ある要素をクリックした時にclassNameをつけたり外したりをReactならではの機能で実装できないかな」

今回は上記の悩みにお答えします。

素のJavaScriptであれば普通に書けるかもですね。
でも、せっかくReactを使うなら もっと効率的に書きたくないですか?

そこで役に立つのが「 useState 」です。

この記事では、 useState を使って「 ある要素をクリックした時にclassNameをつけたり外したりする機能 」を実装する方法を解説します。

useStateをインポートして使う

ここでは、Reactの基本的な開発環境を想定して解説していきます。
App.jsに、以下のように記述してください。

/* App.js */
/* 「useState」をインポートする↓ */
import React, { useState } from "react";
import "./styles.css";
const App = () => {
  /* state変数を定義する↓ */
  const [active, setActive] = useState(false);
  return (
      <h1>Hello, world!</h1>
      <button>classNameをつけたり外したりする</button>
    </div>
export default App;

まず、 useState を使うためにインポートします。
そして、 state変数 を定義します。

active 」という変数を定義 し、デフォルト値は false としています。
「active = false」がデフォルトです。

そしてなんらかの処理を行うことで、「active」は「 setActive 」として更新されます。

activeを更新する関数を定義する

なかなかピンと来ないかと思いますが、実際にやってみましょう。
App.jsに、以下のように記述を 追加 してください。

/* App.js */
import React, { useState } from "react";
import "./styles.css";
const App = () => {
  const [active, setActive] = useState(false);
  /* 「classToggle」という関数を定義↓ */
  const classToggle = () => {
    setActive(!active)
  return (
    ......
export default App;

まず、「 classToggle 」という関数を定義しています。
どんな関数かと言うと...

先ほど定義したstate変数の「 active 」のデフォルトは false です。
「classToggle」が発動すると、「active」が true に変わります。

もう一度「classToggle」が発動すると「active」は false に変わります。
つまり、 「classToggle」で「active」のtrue、falseを切り替える ことができます。

切り替わった「active」は「setActive」という変数で更新します。
そのため「 setActive(!active) 」という書き方になります。

ボタンクリックで関数を発動させる

あとは、「classToggle」を どうやって発動させるか を決めます。
今回は、「 ボタンをクリックした時 」に「classToggle」を発動させます。

/* App.js */
import React, { useState } from "react";
import "./styles.css";
const App = () => {
  const [active, setActive] = useState(false);
  const classToggle = () => {
    setActive(!active)
  return (
      {/* classNameを追加↓ */}
      <h1 className={active ? "red" : ""}>Hello, world!</h1>
      {/* ↓クリックで「classToggle」が発動するように設定 */}
      <button onClick={classToggle}>classNameをつけたり外したりする</button>
    </div>
export default App;

そこで、buttonタグに「onClick={classToggle}」と記述しています。
これにより、ボタンをクリックした時に「classToggle」が発動します。

そしてボタンをクリックするたびに、 「active」のtrue、falseが切り替わります
これを利用して以下の状態を作ります。

  • 「active」が true の時に「 red 」というclassNameをつける

  • 「active」が false の時は「 red 」というclassNameを外す

h1タグには次のように記述しました。

<h1 className={active ? "red" : ""}>Hello, world!</h1>
{/* 略さず書くとこちら↓ */}
<h1 className={active === true ? "red" : ""}>Hello, world!</h1>

こう書くことにより、以下のようになります。

  • 「active」が true の時は「 className="red" 」となる

  • 「active」が false の時は「 className="" 」となる

三項演算子 という書き方で、条件分岐を記述しています。

すでに別のclassNameがある場合でも大丈夫です。

例えば、「 hello 」というclassNameがすでにあるとします。
そこに、「 red 」というclassNameをつけたり外したりしたい場合は以下のように書きます。

{/* すでに別のclassNameがある場合 */}
<h1 className={`hello ${active ? "red" : ""}`}>Hello, world!</h1>

あとは cssを適用させる だけです。
例として、styles.cssを以下のように記述してみましょう。

/* styles.css */
.red {
  color: red;