LoginSignup
0
3

More than 3 years have passed since last update.

【Vue.js】条件に応じて表示するリストを切り替えるサンプルコード

Last updated at Posted at 2020-01-23

はじめに

先日、こちらの記事を書きました。

ここで登場したコードに追記して、条件に応じて表示するリストを切り替える方法について記載します。

環境

OS: macOS Catalina 10.15.1
Vue: 2.6.10
vue-router: 2.6.10
vuetify: 2.1.0

結論

Sample.vue
<template>
  <v-list>
    <v-list-item
      v-for="item in selectedItems"
      :key="item.id"
      @click="triggerClick(item.action)"
    >
      <router-link :to="{ name: item.link }">
        <v-list-item-title>
          {{ item.name }}
        </v-list-item-title>
      </router-link>
    </v-list-item>
  </v-list>
</template>

<script>
  export default {
    data() {
      return {
        selectedPattern: 1, //ここで条件を切り替える
        items: [
          {id: 1, name: '1へのリンク', link: 'Component1', action: '', pattern: 1},
          {id: 2, name: '2へのリンク', link: 'Component2', action: '', pattern: 2},
          {id: 3, name: 'action1を実行', link: '', action: 'action1', pattern: 1},
          {id: 4, name: 'action2を実行', link: '', action: 'action2',  pattern: 2},
        ]
      }
    },
    computed: {
      /* 
       * filterを使って事前にリストを精査しておく
       * patternが1か2かで表示する内容を変更
       */
      selectedItems(){
        return this.items.filter(item => item.pattern === this.selectedPattern)
      }
    },
    methods: {
      triggerClick(action) {
        if (action === 'action1') {
          anyAction1()
        } else if (action === 'action2') {
          anyAction2()
        }
      }
    }
  }
</script>

この例では、selectedを手動で1としていますが、
応用としてVuexで作成したストアからstateを呼び出し、それに応じてリストを切り替える、といったようなことも可能になります。

※ログインしないとログアウトを表示しない、など。

補足:v-ifを使わない理由: 効率悪化

今回のパターンでは、ついv-ifv-forを同時に使えば切り替え出来るのでは?となりがちですが、公式ドキュメントでは非推奨となっています。

v-if と v-for を同時に利用することは 推奨されません。 詳細については スタイルガイド を参照ください。

スタイルガイドによると、

v-ifv-forを同時に使用した場合

再レンダリングするたびにリスト全体を繰り返し処理する必要があります。

computedプロパティ内でfilterを使っていた場合

フィルタリングされたリストは配列に関連する変更があった場合に のみ 再評価されるので、フィルタリングがはるかに効率的になります。

描画効率が悪くなってしまうんですね:sweat_smile:

おわりに

最後まで読んで頂きありがとうございました:bow_tone1:

どなたかの参考になれば幸いです:relaxed:

参考にさせて頂いたサイト(いつもありがとうございます)

0
3
1

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
3