JavaScriptに関するお知らせ

SINCE2019
>
【JS】Vueの:classの書き方3通り

【JS】Vueの:classの書き方3通り


2020-6-5追記: Reactでも同じ記事書いたよ!

こんにちは!今日はVueの動的クラス(:class)の書き方3通りについて紹介します。

静的なclass(通常のclass)

通常のclassを用いる方法は通常のhtml、cssと全く同じよ。こんな感じ

<div class="red">りんご</div>
.red {
  color: red;
}

動的なclass(v-bind:class)

動的なclass(dataによって値が変わるclass)を用いるにはv-bind:classを用います。こんな感じ

<div v-bind:class='"red"'>りんご</div>
.red {
  color: red;
}

vueでは v-bind: を省略して : のみにできるのでこんな風に書けます。実際はこの書き方の方が多いっすねー

<div :class='"red"'></div>

あとv-bind系で文字列を使う場合はクォーテーションの中に更にクォーテーションが必要なので注意!これだとエラーになるよ。

<div :class="red"></div>

vueで:classを使う時は、dataの値によってclassを選択するような場面が多いんじゃないかなって思います。dataは↓のような書き方するやつ。

export default {
  data: () => ({
    one: 1,
    two: 2,
    three: 3,
  }),
}

:classの使い方

1.dataが条件に合えばclassを付与

dataが条件に合えばclassを付与、合わなければ何も付与しない書き方です。 まあ一番使うかも。 data「one」の値が1ならclass「color--one」を付与するにはこんな感じ。

<div :class='{"color--one", one === 1}'></div>

:class='{"クラス名", 条件}' みたいな感じね。 クラス名をクォートで囲むの忘れがちなので注意。

2.dataが条件に合えばclass1、合わなければclass2を付与

そのまんま。これが一番使わないかも。

data「one」の値が1ならclass「color--one」、じゃなければ「color--not-one」付与するにはこんな感じ。

<div :class='[one === 1 ? "color--one" : "color--not-one"]'></div>

条件とクラス名の順番に注意! :class='[条件 ? "クラス名", "クラス名"]' みたいな感じね。

3.付与するクラス名の一部にdataを用いる

これめっちゃ使えるけど公式ドキュメントに載ってない。パフォーマンスが悪いのかな? color--【dataの値】みたいなクラス名にするにはこう。

<div :class="`color--${data}`"></div>

おわりに

特に3.はめっちゃ使えると思うので使ってみてくだされ。BEMとかと相性良さそうね! もちろん、1と3を混ぜるみたいな使い方もできるけどあんまりやると可読性悪くなるので注意。



PREV
2019-06-06
【JS】アロー関数の戻り値がObjectの時に()が必要な理由を詳しく解説

NEXT
2019-06-30
【JS】JavaScriptにセミコロン付けない派の一意見